0

SLF4J: Не удалось загрузить класс "org.slf4j.impl.StaticLoggerBinder" в Maven-проекте

9

Описание проблемы

У меня есть зависимость от SLF4J, и я получаю следующую ошибку:

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.

Вот мой Maven-запись:

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.6.6</version>
</dependency>

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
    <version>1.6.6</version>
</dependency>
<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.16</version>
</dependency>

Где может быть проблема?


EDIT: Без зависимости от log4j я получаю следующую исключение:

Failed to instantiate SLF4J LoggerFactory
Reported exception:
java.lang.NoClassDefFoundError: org.slf4j.impl.StaticLoggerBinder
    at org.slf4j.LoggerFactory.bind(LoggerFactory.java:121)
    at org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:111)
    at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:268)
    at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:241)
    at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:254)
    at org.apache.bval.jsr303.ConfigurationImpl.<clinit>(ConfigurationImpl.java:50)
    ...

EDIT2: Вот пример дерева зависимостей Maven, который я получаю:

[INFO] com.myCompany.abc:ABC_Document:ejb:0.0.1-SNAPSHOT
[INFO] +- com.myCompany.abc:ABC_Basic:jar:0.0.1-SNAPSHOT:compile
[INFO] +- com.myCompany.iap:javax.j2ee:jar:5.0.0:provided
[INFO] +- com.myCompany.iap:logging:jar:5.0.0:provided
[INFO] +- com.myCompany.iap:util:jar:5.0.0:provided
[INFO] +- junit:junit:jar:4.8.2:test
[INFO] +- javax.servlet:jstl:jar:1.2:provided
[INFO] +- org.slf4j:slf4j-api:jar:1.6.6:compile
[INFO] +- org.slf4j:slf4j-simple:jar:1.6.6:compile
[INFO] \- org.mockito:mockito-all:jar:1.9.0:test

Помогите, пожалуйста, разобраться с этой проблемой!

2 ответ(ов)

0

Я столкнулся с этой проблемой в IntelliJ и решил её, добавив в свой pom.xml следующие зависимости:

<!-- Зависимости для логирования -->
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>${logback.version}</version>
    <exclusions>
        <exclusion>
            <!-- Определен ниже -->
            <artifactId>slf4j-api</artifactId>
            <groupId>org.slf4j</groupId>
        </exclusion>
    </exclusions>
</dependency>

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>${slf4j.version}</version>
</dependency>

Убедитесь, что вы корректно указали версии для logback.version и slf4j.version в вашем pom.xml. Это должно решить проблемы с зависимостями логирования в вашем проекте.

0

Сообщение, которое вы упоминаете, достаточно ясно:

SLF4J: Не удалось загрузить класс "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Используется реализация логгера с нулевым действием (NOP).
SLF4J: Дополнительные сведения смотрите по адресу http://www.slf4j.org/codes.html#StaticLoggerBinder.

API SLF4J не смогло найти реализацию, и решило использовать реализацию NOP по умолчанию. В вашем случае файл slf4j-log4j12.jar каким-то образом оказался недоступен, когда класс LoggerFactory был загружен в память, что действительно очень странно. Что вы видите в результате выполнения команды "mvn dependency:tree"?

Различные объявления зависимостей могут даже не быть непосредственной причиной проблемы. У меня сильные подозрения, что версия slf4j-api.jar ниже 1.6 была развернута без вашего ведома.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь