web-dev-qa-db-ja.com

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>

問題はどこにありますか?


編集: 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ツリーの例です

[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
37
Kayser

開発環境としてEclipseを使用していると仮定しています。

バンドルされたMavenバージョン(m2e)を使用している場合、Eclipse Juno、Indigo、およびKeplerは、メッセージSLF4J:クラス "org.slf4j.impl.StaticLoggerBinder"のロードに失敗しました。この動作は、m2eバージョン1.1.0.20120530-0009以降に存在します。

ただし、これはエラーとして示され、ログは正常に保存されます。強調表示されたエラーは、このバグが修正されるまで引き続き存在します。詳細については、 m2eサポートサイト を参照してください。

現在利用可能なソリューションは、Eclipseのバンドルバージョンではなく、外部のMavenバージョンを使用することです。この解決策とこのバグに関する詳細は、直面している同じ問題を説明していると思う以下の質問で見つけることができます。

SLF4J:クラス "org.slf4j.impl.StaticLoggerBinder"のロードに失敗しました。エラー

削除する

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

slf4j-log4j12slf4jのlog4jバインディングです。別のlog4j依存関係を追加する必要はありません。

追加
log4j.propertiesにlog4j構成を提供し、クラスパスに追加します。サンプル構成があります こちら

または、バインディングをに変更できます

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

slf4jを必要とするいくつかの依存関係のためにslf4jを構成する場合。

22
basiljames

私は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>
10
3ck

あなたが言及するメッセージは非常に明確です:

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.

SLF4J APIはバインディングを見つけることができなかったため、デフォルトでNOP実装に決定しました。あなたの場合、LoggerFactoryクラスがメモリにロードされたとき、slf4j-log4j12.jarはどういうわけか表示されませんでした。確かにvery strangeです。 「mvndependency:tree」は何を教えてくれますか?

ここでは、さまざまな依存関係宣言が直接原因にならない場合もあります。 1.6より前のバージョンのslf4j-api.jarは知らないうちに展開されています。

2
Ceki