Подтвердить что ты не робот

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

У меня есть зависимость для 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)
    at java.lang.J9VMInternals.initializeImpl(Native Method)
    at java.lang.J9VMInternals.initialize(J9VMInternals.java:228)
    at org.apache.bval.jsr303.ApacheValidationProvider.createGenericConfiguration(ApacheValidationProvider.java:66)
    at javax.validation.Validation$GenericBootstrapImpl.configure(Validation.java:173)
    at javax.validation.Validation.buildDefaultValidatorFactory(Validation.java:50)
    at com.daimler.zv9.basic.entity.AbstractEntity.<clinit>(AbstractEntity.java:73)
    at java.lang.J9VMInternals.initializeImpl(Native Method)
    at java.lang.J9VMInternals.initialize(J9VMInternals.java:228)
    at java.lang.J9VMInternals.initialize(J9VMInternals.java:195)
    at java.lang.Class.forNameImpl(Native Method)
    at java.lang.Class.forName(Class.java:168)

EDIT2: Это пример MAVEN Tree, который я получаю

[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
4b9b3361

Ответ 1

Я предполагаю, что вы используете Eclipse в качестве среды разработки.

Eclipse Juno, Indigo и Kepler при использовании вложенной версии maven (m2e) не подавляют сообщение SLF4J: Не удалось загрузить класс "org.slf4j.impl.StaticLoggerBinder". Такое поведение присутствует в версии m2e 1.1.0.20120530-0009 и далее.

Хотя это указано как ошибка, ваши журналы будут сохранены в обычном режиме. Выделенная ошибка будет по-прежнему присутствовать до тех пор, пока не будет исправлена ​​эта ошибка. Подробнее об этом в сайте поддержки m2e.

Текущее доступное решение - использовать внешнюю версию maven, а не комплектную версию Eclipse. Вы можете найти об этом решении и более подробную информацию об этой ошибке в вопросе ниже, который, как я полагаю, описывает ту же проблему, с которой вы сталкиваетесь.

SLF4J: Не удалось загрузить класс "org.slf4j.impl.StaticLoggerBinder" . ошибка

Ответ 2

Удалить

<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.16</version>
</dependency> 

slf4j-log4j12 - это привязка log4j для slf4j, вам не нужно добавлять другую зависимость log4j.

Добавлен
Предоставьте конфигурацию log4j в log4j.properties и добавьте ее в свой путь к классу. Существуют примеры конфигураций здесь

или вы можете изменить привязку к

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-simple</artifactId>
    <version>1.6.1</version>
</dependency>

если вы настраиваете slf4j из-за некоторых зависимостей, требующих его.

Ответ 3

Я столкнулся с этим в IntelliJ и исправил его, добавив следующее к моему pom:

<!-- logging dependencies -->
    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
        <version>${logback.version}</version>
        <exclusions>
            <exclusion>
                <!-- Defined below -->
                <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>

Ответ 4

Сообщение, которое вы упомянули, совершенно ясно:

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.

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

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