0

log4j私は過去に一緒に働いたことがあります。今、私は新しいプロジェクトを偵察していて、それが を使用していることに気づきましたslf4j 1.7.2java.util.logging、log4j、logbackなど、それに準拠するさまざまな実装に簡略化されたインターフェイス (AKA ファサード) を提供する API 仕様にすぎないことを理解しています。しかし、commons-loggingAPI Web サイトのリストには記載されていませんでしたが、その jar はこのアプリのクラスパスにありました。クラスパスから削除して、使用されている実装であるかどうかを確認したところ、実際に次のようになっていることが確認されました。

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.
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory

commons-logging は本当に slf4j のデフォルトの実装ですか? ドキュメントに次のように記載されているためです。

クラスパスにバインディングが見つからない場合、SLF4J はデフォルトでノーオペレーション実装になります。

上記のリンク先のページで。slf4j-nop-1.7.2.jarそして、上記のデフォルトの実装がそうであると推測しているクラスパスにあるにもかかわらずorg/apache/commons/logging/LogFactory、コモンズがクラスパスにないかどうかを尋ねる例外が依然として発生するため、混乱しています。

説明をいただければ幸いです。

4

1 に答える 1

0

クラスパスには、バインディング jar とロギング実装 (この場合は JCL) の組み合わせが必要です。

デプロイ時のロギング フレームワークとのバインド

commons-logging はデフォルトではありませんが、クラスパスに slf4j-jcl-1.7.2.jar がある場合、それを使用しようとします。そのため、パスから JCL を削除すると、クラスが見つからないというエラーが表示されます。

slf4j-nop-1.7.2.jar はノーオペレーションの「SLF4J バインディング」jar であり、それ自体は実装ではありません。

于 2013-02-21T23:24:18.790 に答える