49

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
4

4 に答える 4

43

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

バンドルされた Maven バージョン (m2e) を使用している場合、Eclipse Juno、Indigo、および Kepler は、メッセージ SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder" を抑制しません。この動作は、m2e バージョン 1.1.0.20120530-0009 以降から存在します。

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

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

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

于 2012-11-07T11:01:27.513 に答える
35

削除する

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

slf4j-log4j12log4jバインディングは、slf4j別のlog4j依存関係を追加する必要がないためのものです。

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

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

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

いくつかの依存関係のためにslf4jを構成している場合。

于 2012-09-17T11:45:19.130 に答える
16

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>
于 2013-02-21T22:48:51.853 に答える
2

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

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がどういうわけか表示されませんでした。これは、明らかに非常に奇妙なことです。「mvndependency:tree」は何を教えてくれますか?

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

于 2012-09-17T17:45:03.267 に答える