web-dev-qa-db-ja.com

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

私のアプリケーションは、tcServerとWebSphere 6.1の両方にデプロイされる予定です。このアプリケーションはehCacheを使用しているため、依存関係としてslf4jが必要です。結果として、私は自分のwarファイルバンドルにslf4j-api.jar(1.6)jarを追加しました。

次のエラーを除いて、アプリケーションはtcServerで正常に動作します。

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.

しかし、WebSphereにデプロイするとJava.lang.NoClassDefFoundError: org.slf4j.impl.StaticLoggerBinderが返されます。

両方のアプリケーションサーバーのクラスパスを確認しましたが、他にslf4j jarはありません。

誰かがここで何が起こっているのか、何か考えがありますか?

480
DJ180

WebSphere 6.1でも同じ問題がありました。 Cekiが指摘したように、WebSphereが使用しているjarファイルはたくさんあり、そのうちの1つは古いバージョンのslf4jを指していました。

無操作ロールバックはslf4j -1.6+でのみ発生するため、それより古いものは例外をスローしてデプロイメントを停止します。

これを解決するドキュメントが SLf4J site にあります。私はそれに従って、私がすでに持っていたslf4j-simple-1.6.1.jarと共に私のアプリケーションにslf4j-api-1.6.1.jarを追加しました。

これで私の問題は解決しました。この問題を抱えている他の人に役立つことを願っています。

428
prasann

これはグーグル検索からここに来た人のためのものです。

あなたがmavenを使っているならば、ただ以下を加えてください

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

または

   <dependency>
       <groupId>org.slf4j</groupId>
       <artifactId>slf4j-api</artifactId>
       <version>1.7.5</version>
   </dependency>
   <dependency>
       <groupId>org.slf4j</groupId>
       <artifactId>slf4j-simple</artifactId>
       <version>1.6.4</version>
   </dependency>
291
Igor Katkov

クラスパスに次のjarファイルを追加する必要があります:slf4j-simple-1.6.2.jar。持っていない場合は、ダウンロードしてください。 http://www.slf4j.org/codes.html#multiple_bindings を参照してください。

40
ashish

これを pom.xml に追加するだけです。

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

ここでかなりいくつかの答えがあなたのmaven pomファイルにslf4j-simple依存関係を追加することを勧めます。最新のバージョンを調べたいと思うかもしれません。

https://mvnrepository.com/artifact/org.slf4j/slf4j-simple には、SLF4J Simple Bindingの最新バージョンがあります。あなたに最も適したものを選択し(まだ2017-03からの1.7.25は2019-03の安定版です)、それをあなたのpom.xmlに含めてください。

2019年2月のベータ版

<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-simple -->
<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-simple</artifactId>
  <version>1.8.0-beta4</version>
  <scope>test</scope>
</dependency>

安定版

<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-simple -->
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-simple</artifactId>
    <version>1.7.25</version>
</dependency>
23
Wolfgang Fahl

私は同じエラーに直面していました。私のローカル開発では、slf4j-api、slf4j-log4j12、およびlog4jを構成しました。すべての設定は問題ありませんでしたが、mvnrepositoryからコピーしたslf4j-log4j12依存関係にはテストスコープ<scope>test</scope>がありました。これを削除したとき、すべてのことは問題ありません。

愚かなミスが頭を痛めることもあります。

21
thangaraj

たとえば、警告からのメモが表示されることがあります。 SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.

この警告が表示される理由を検索できます。
クラスパスに*slf4j-nop.jarslf4j-simple.jarslf4j-log4j12.jarslf4j-jdk14.jar、またはlogback-classic.jar*のいずれかのjarファイルを追加すると問題が解決します。

compile "org.slf4j:slf4j-api:1.6.1" compile "org.slf4j:slf4j-simple:1.6.1"

たとえば、上記のコードをbuild.gradleに追加するか、対応するコードをmavenプロジェクトのpom.xmlに追加します。

17
Edward

ファイルslf4j-log4j12-1.6.4.jarをクラスパスに入れるとうまくいくでしょう。

14
stones333

あなたが依存関係管理にmavenを使っているのであれば、pom.xmlに以下の依存関係を追加するだけでいいです。

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
    <version>1.5.6</version>
</dependency>

Maven以外のユーザーの場合ライブラリをダウンロードしてプロジェクトのクラスパスに追加するだけです。

ここであなたは詳細を見ることができます: http://www.mkyong.com/wicket/Java-lang-classnotfoundexception-org-slf4j-impl-staticloggerbinder/

10
shohan

SLF4jは抽象化です さまざまなロギングフレームワークのために 。したがってslf4jを持つこととは別に、あなたはlog4jやlogback(など)のようなあなたのロギングフレームワークのいずれかをあなたのクラスパスに含める必要があります。
アイデアを持たせるには、 http://logback.qos.ch/manual/introduction.htmlのFirst Baby Stepを参照してください

8
Anver Sadhat

Slf4jは、log4j、logback、Java.util.loggingなどの基盤となるロギングフレームワークのファサードです。

基礎となるフレームワークと接続するために、slf4jはバインディングを使用します。

  • log4j - slf4j-log4j12-1.7.21.jar
  • Java.util.logging - slf4j-jdk14-1.7.21.jarなど

バインディングjarを見逃した場合、上記のエラーがスローされます。このjarファイルをダウンロードしてクラスパスに追加することができます。

Mavenの依存関係については、

<dependency> 
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-log4j12</artifactId>
  <version>1.7.21</version>
</dependency>

Slf4j-log4j12-1.7.21.jarに加えてこの依存関係は、それはあなたのプロジェクトにlog4j-1.2.17.jarと同様にslf4j-api-1.7.21.jarを引っ張る

参照: http://www.slf4j.org/manual.html

5

私は、Java 9ライブラリを使ったSpring-boot-2アプリケーションでも同様の問題に直面していました。

私のpom.xmlに次の依存関係を追加することで問題は解決しました。

    <dependency>
        <groupId>com.googlecode.slf4j-maven-plugin-log</groupId>
        <artifactId>slf4j-maven-plugin-log</artifactId>
        <version>1.0.0</version>
    </dependency>
5
KayV

Websphereの場合は、slf4j-api.jarの古いバージョン、1.4.xがあります。 1.5.xがどこかにあります。 tcServerで観察される動作、つまりNOPへのフェイルオーバーは、slf4jバージョン1.6.0以降で発生します。すべてのプラットフォームでslf4j-api-1.6.x.jarを使用していること、および古いバージョンのslf4j-apiがクラスパスに配置されていないことを確認してください。

4
Ceki

次のようなエラーが出たときにこの問題に遭遇しました。

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.

libsslf4j-api-1.7.5.jarを使っていたとき。

私はslf4j-log4j12-1.7.5.jarslf4j-simple-1.7.5のような全体的に提案された補完jarを試してみましたが、それでもエラーメッセージは持続しました。私がslf4j-jdk14-1.7.5.jarをJavaライブラリに追加したとき、問題はついに解決されました。

Slf4jパッケージ全体を http://www.slf4j.org/download.html で入手してください。

4
user278049

この問題を解決するには、pomに次の依存関係を追加してください。

<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-simple</artifactId>
  <version>1.7.25</version>
  <scope>test</scope>
</dependency>

<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-api</artifactId>
  <version>1.7.25</version>
</dependency>
4
gowthamjs23

私はStruts2 + Springプロジェクトに取り組んでいます。そのため、依存関係slf4j-api-1.7.5.jarが必要です。

プロジェクトを実行すると、次のようなエラーになります。

クラス "org.slf4j.impl.StaticLoggerBinder"の読み込みに失敗しました /

私はslf4j-log4j12-1.7.5.jarを追加することによって私の問題を解決しました。

だから問題を解決するためにあなたのプロジェクトにこのjarファイルを追加してください。

3
softmage99

SLF4J Manual のように

Java用の簡易ロギングファサード(SLF4J)は、Java.util.logging、logback、およびlog4jなどのさまざまなロギングフレームワークのための単純なファサードまたは抽象化として機能します。

そして

クラスパスにバインディングを追加するとすぐに警告は消えます。

ですから、どのバインディングを使用したいのかを選択する必要があります。

NoOpバインディング(slf4j-nop)

NOPにバインドし、すべてのロギングを黙って破棄します。

最新版をチェックするには https://search.maven.org/search?q=g:org.slf4j%20AND%20a:slf4j-nop&core=gav にアクセスしてください。

単純結合(slf4j-simple)

すべてのイベントをSystem.errに出力します。 INFO以上のレベルのメッセージのみが印刷されます。このバインディングは、小さなアプリケーションの場合に役立ちます。

最新版を確認するには https://search.maven.org/search?q=g:org.slf4j%20AND%20a:slf4j-simple&core=gav を参照してください。

ロギングフレームワーク(Java.util.logging、logback、log4j)のバインディング

ログをファイルに書き込む場合は、これらのバインディングのいずれかが必要です。

https://www.slf4j.org/manual.html#projectDep で説明と手順を参照してください。


私の意見

Logbacklog4jプロジェクトの後継プロジェクトであるため、この方法をお勧めします。

https://search.maven.org/search?q=g:ch.qos.logback%20AND%20a:logback-classic&core=gav で、バインディングの最新バージョンを確認してください。

コンソールの出力はそのまま使用できますが、ログをファイルに書き込む必要がある場合は、次のようにFileAppender設定をsrc/main/resources/logback.xmlまたはsrc/test/resources/logback-test.xmlに設定するだけです。

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <!-- encoders are assigned the type
             ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>
    <appender name="FILE" class="ch.qos.logback.core.FileAppender">
        <file>logs/logs.log</file>

        <encoder>
            <pattern>%date %level [%thread] %logger{10} - %msg%n</pattern>
        </encoder>
    </appender>

    <root level="debug">
        <appender-ref ref="STDOUT" />
        <appender-ref ref="FILE" />
    </root>

    <logger level="DEBUG" name="com.myapp"/>
</configuration>

(マニュアルの詳細な説明を参照してください: https://logback.qos.ch/manual/configuration.html

3
Lu55

この問題を解決するために、この依存関係を追加しました。

https://mvnrepository.com/artifact/org.slf4j/slf4j-simple/1.7.25
2
Amado Saladino

Jarのインクルードと純粋なmavenのソリューションに代わるものとして、 mavenから gradle付きで含めることができます。

バージョン1.7.25の例

// https://mvnrepository.com/artifact/org.slf4j/slf4j-simple
api group: 'org.slf4j', name: 'slf4j-simple', version: '1.7.25'

これをあなたのbuild.gradleファイルの依存関係の中に入れてください。

2
Vrakfall

SLF4J 公式文書によると

クラスorg.slf4j.impl.StaticLoggerBinderのロードに失敗しました

この警告メッセージは、org.slf4j.impl.StaticLoggerBinderクラスをメモリにロードできなかった場合に報告されます。これは、クラスパスに適切なSLF4Jバインディングが見つからなかった場合に起こります。1つだけ配置slf4j-nop.jar、slf4j-simple.jar、slf4j-log4j12.jar、slf4j-jdk14.jar、またはlogback-classic.jarのonクラスパスは問題を解決するはずです。

Slf4j api.jarと一緒に このjar をクラスパスに追加するだけで、作業が完了します。最高の運

1
Roushan

私はそれをこのライブラリを追加することで解決します:slf4j-simple-1.7.25.jarあなたは公式ウェブサイトでこれをダウンロードすることができます https://www.slf4j.org/download.html

1
Luis Manrique

私はこの記事が少し古いことを知っていますが、万が一他の人がこの問題に遭遇した場合:

CLASSPATHにslf4j-jdk14-X.X.X.jarを追加します(X.X.Xはバージョン番号です(例:slf4j-jdk14-1.7.5.jar))。

HTHピーター

0
midiman

これが私の5セントです...

テストの実行中に同じ問題がありました。そのため、テストランタイム専用の実装を追加することで修正しました。私はこのプロジェクトにgradleを使っています。

// https://mvnrepository.com/artifact/ch.qos.logback/logback-classic

testRuntimeOnlyグループ: 'ch.qos.logback'、名前: 'logback-classic'、バージョン: '1.2.3'

0
Esteban

私はJenaを使い、pom.xmlに仲間の依存関係を追加します

<dependency> 
  <groupId>ch.qos.logback</groupId>
  <artifactId>logback-classic</artifactId>
  <version>1.0.13</version>
</dependency>

Slf4j-simpleを追加しようとしましたが、「SLF4J:クラス“ org.slf4j.impl.StaticLoggerBinder”のロードに失敗しました」というエラーが表示されなくなりましたが、logback-classicにはより詳細な情報が表示されます。

公式文書

0
Pingjiang Li
     <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-simple</artifactId>
        <version>1.7.21</version>
    </dependency>

上記の依存関係をpom.xmlファイルに入れる

0
A.Dhami

解決策は彼らの公式ウェブサイトに示されています。

クラスorg.slf4j.impl.StaticLoggerBinderのロードに失敗しました

この警告メッセージは、org.slf4j.impl.StaticLoggerBinderクラスをメモリにロードできなかった場合に報告されます。これは、クラスパスに適切なSLF4Jバインディングが見つからなかった場合に起こります。 slf4j-nop.jar、slf4j-simple.jar、slf4j-log4j12.jar、slf4j-jdk14.jar、またはlogback-classic.jarのいずれか1つだけをクラスパスに配置すると問題は解決します。 SINCE 1.6.0 SLF4Jバージョン1.6以降、バインディングがない場合、SLF4Jはデフォルトでノーオペレーション(NOP)ロガー実装になります。アプリケーションのパッケージ化を担当していて、ログ記録を気にしないのであれば、slf4j-nop.jarをアプリケーションのクラスパスに配置すると、この警告メッセージが表示されなくなります。ライブラリーやフレームワークなどの組み込みコンポーネントは、SLF4Jバインディングへの依存関係を宣言するべきではなく、slf4j-apiにのみ依存するはずです。ライブラリーがSLF4Jバインディングへのコンパイル時の依存関係を宣言すると、そのバインディングがエンドユーザーに課されるため、SLF4Jの目的は無効になります。

解決策:私はintellijに関するMavenの研究を使用して私のプロジェクトに追加し、私はslf4j-jdk14.jarを選択しました。

0
Badr Bellaj

私にとって問題は、Hibernateを使用して、すでにslf4jを使用していて、すでにクラスパスに含まれていることがわかったため、使用することにしたことです。次のステップ - slf4jのためのimlementorの追加、それで私はmavenに加えました:

<dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-jdk14</artifactId>
        <version>1.7.25</version>
</dependency>

しかし、それはエラーで失敗しました! SLF4J:クラス“ org.slf4j.impl.StaticLoggerBinder”をロードできませんでした

解決策は以下のとおりです。slf4jに対するHibernateの依存関係はversion 1.7.26 であり、マイナーバージョン依存関係 1.7.25 を追加しました。だから私はこれを修正したとき - すべてがOKになりました

0
JeSa

@thangaraj で述べたように、おそらくあなたの問題は<scope>test</scope>(場合によっては<scope>provided</scope>)が原因でした。

ドキュメンテーション は言う:

この範囲は、依存関係がアプリケーションの通常の使用には必要ではなく、テストのコンパイル段階と実行段階でのみ使用可能であることを示しています。 テストの依存関係は推移的ではなく、テストクラスパスと実行クラスパスにのみ存在します。

したがって、テスト目的で依存関係が必要ない場合は、( mvnrepository に表示されるもの)の代わりに使用できます。

<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-nop -->
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-nop</artifactId>
    <version>1.7.24</version>
    <scope>test</scope>
</dependency>

スコープがない場合(他のスコープが指定されていない場合、デフォルトでcompile scopeになります)。

<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-nop -->
<dependency>  
   <groupId>org.slf4j</groupId>
   <artifactId>slf4j-nop</artifactId>
   <version>1.7.25</version>
</dependency>

これは以下と同じです。

 <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-nop -->
 <dependency>  
   <groupId>org.slf4j</groupId>
   <artifactId>slf4j-nop</artifactId>
   <version>1.7.25</version>
   <scope>compile</scope>
 </dependency>
0
invzbl3