私のアプリケーションは、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はありません。
誰かがここで何が起こっているのか、何か考えがありますか?
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
を追加しました。
これで私の問題は解決しました。この問題を抱えている他の人に役立つことを願っています。
これはグーグル検索からここに来た人のためのものです。
あなたが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>
クラスパスに次のjarファイルを追加する必要があります:slf4j-simple-1.6.2.jar
。持っていない場合は、ダウンロードしてください。 http://www.slf4j.org/codes.html#multiple_bindings を参照してください。
これを pom.xml に追加するだけです。
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>1.7.21</version>
</dependency>
ここでかなりいくつかの答えがあなたの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>
私は同じエラーに直面していました。私のローカル開発では、slf4j-api、slf4j-log4j12、およびlog4jを構成しました。すべての設定は問題ありませんでしたが、mvnrepositoryからコピーしたslf4j-log4j12依存関係にはテストスコープ<scope>test</scope>
がありました。これを削除したとき、すべてのことは問題ありません。
愚かなミスが頭を痛めることもあります。
たとえば、警告からのメモが表示されることがあります。 SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
。
この警告が表示される理由を検索できます。
クラスパスに*slf4j-nop.jar
、slf4j-simple.jar
、slf4j-log4j12.jar
、slf4j-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
に追加します。
ファイルslf4j-log4j12-1.6.4.jar
をクラスパスに入れるとうまくいくでしょう。
あなたが依存関係管理に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/
SLF4jは抽象化です さまざまなロギングフレームワークのために 。したがってslf4jを持つこととは別に、あなたはlog4jやlogback(など)のようなあなたのロギングフレームワークのいずれかをあなたのクラスパスに含める必要があります。
アイデアを持たせるには、 http://logback.qos.ch/manual/introduction.htmlのFirst Baby Stepを参照してください
Slf4jは、log4j、logback、Java.util.loggingなどの基盤となるロギングフレームワークのファサードです。
基礎となるフレームワークと接続するために、slf4jはバインディングを使用します。
バインディング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を引っ張る
私は、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>
Websphereの場合は、slf4j-api.jarの古いバージョン、1.4.xがあります。 1.5.xがどこかにあります。 tcServerで観察される動作、つまりNOPへのフェイルオーバーは、slf4jバージョン1.6.0以降で発生します。すべてのプラットフォームでslf4j-api-1.6.x.jarを使用していること、および古いバージョンのslf4j-apiがクラスパスに配置されていないことを確認してください。
次のようなエラーが出たときにこの問題に遭遇しました。
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.
libs
でslf4j-api-1.7.5.jar
を使っていたとき。
私はslf4j-log4j12-1.7.5.jar
やslf4j-simple-1.7.5
のような全体的に提案された補完jarを試してみましたが、それでもエラーメッセージは持続しました。私がslf4j-jdk14-1.7.5.jar
をJavaライブラリに追加したとき、問題はついに解決されました。
Slf4jパッケージ全体を http://www.slf4j.org/download.html で入手してください。
この問題を解決するには、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>
私はStruts2 + Springプロジェクトに取り組んでいます。そのため、依存関係slf4j-api-1.7.5.jar
が必要です。
プロジェクトを実行すると、次のようなエラーになります。
クラス "org.slf4j.impl.StaticLoggerBinder"の読み込みに失敗しました /
私はslf4j-log4j12-1.7.5.jar
を追加することによって私の問題を解決しました。
だから問題を解決するためにあなたのプロジェクトにこのjarファイルを追加してください。
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 で説明と手順を参照してください。
私の意見
Logbackはlog4jプロジェクトの後継プロジェクトであるため、この方法をお勧めします。
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 )
この問題を解決するために、この依存関係を追加しました。
https://mvnrepository.com/artifact/org.slf4j/slf4j-simple/1.7.25
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
ファイルの依存関係の中に入れてください。
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 をクラスパスに追加するだけで、作業が完了します。最高の運
私はそれをこのライブラリを追加することで解決します:slf4j-simple-1.7.25.jarあなたは公式ウェブサイトでこれをダウンロードすることができます https://www.slf4j.org/download.html
私はこの記事が少し古いことを知っていますが、万が一他の人がこの問題に遭遇した場合:
CLASSPATHにslf4j-jdk14-X.X.X.jarを追加します(X.X.Xはバージョン番号です(例:slf4j-jdk14-1.7.5.jar))。
HTHピーター
これが私の5セントです...
テストの実行中に同じ問題がありました。そのため、テストランタイム専用の実装を追加することで修正しました。私はこのプロジェクトにgradleを使っています。
// https://mvnrepository.com/artifact/ch.qos.logback/logback-classic
testRuntimeOnlyグループ: 'ch.qos.logback'、名前: 'logback-classic'、バージョン: '1.2.3'
私は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にはより詳細な情報が表示されます。
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>1.7.21</version>
</dependency>
上記の依存関係をpom.xmlファイルに入れる
解決策は彼らの公式ウェブサイトに示されています。
クラス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を選択しました。
私にとって問題は、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になりました
@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>