Slf4j-error-messages
SLF4J-エラーメッセージ
この章では、SLF4Jの操作中に表示されるさまざまなエラーメッセージまたは警告と、それらのメッセージの原因/意味について説明します。
クラス「org.slf4j.impl.StaticLoggerBinder」のロードに失敗しました。
これは、クラスパスでSLF4Jバインディングが提供されていない場合に発生する警告です。
以下は完全な警告です-
これを解決するには、ロギングフレームワークバインディングのいずれかを追加する必要があります。 これについては、このチュートリアルの Hello world の章で説明されています。
注-これは、1.6.0〜1.8.0-beta2のSLF4Jのバージョンで発生します。
SLF4Jプロバイダーが見つかりませんでした
slf4j-1.8.0-beta2では、*「SLF4Jプロバイダーが見つかりませんでした」*という上記の警告はより明確です。
以下は完全な警告です-
クラスパスには、slf4j-apiバージョン1.8より前をターゲットとするSLF4Jバインディングが含まれています
SLF4J 1.8バージョンを使用しており、クラスパスに以前のバージョンのバインディングがあるが1.8のバインディングがない場合は、次のような警告が表示されます。
NoClassDefFoundError:org/apache/commons/logging/LogFactory
これを解決するには、 commons-logging.jar をクラスパスに追加する必要があります。
クラスパスでjcl-over-slf4j.jarとバインドされたslf4j-jcl.jarの両方を検出しました。
バインディング slf4j-jcl.jar はslf4jロガーの呼び出しをJCLにリダイレクトし、 jcl-over-slf4j.jar はJCLロガーの呼び出しをslf4jにリダイレクトします。 したがって、プロジェクトのクラスパスに両方を含めることはできません。 これを行うと、次のような例外が発生します。
これを解決するには、いずれかのjarファイルを削除します。
ロガー名の不一致が検出されました
次の方法でLoggerオブジェクトを作成できます-
- * getLogger()*メソッドの引数として作成されるロガーの名前を渡します。
- このメソッドに引数としてクラスを渡す。
クラスを引数として渡すことによってロガーファクトリオブジェクトを作成しようとしている場合、およびシステムプロパティ slf4j.detectLoggerNameMismatch をtrueに設定している場合は、引数として* getLogger( )*メソッドと使用するクラスは同じでなければなりません。そうしないと、次の警告が表示されます-
「ロガー名の不一致が検出されました。
次の例を考えてください。
ここでは、_slf4j.detectLoggerNameMismatch_プロパティをtrueに設定しました。 使用したクラスの名前は SLF4JExample で、getLogger()メソッドに渡したクラス名は Sample です。これらは両方とも等しくないため、次の警告が表示されます。
注-これはslf4j 1.7.9の後に発生します
クラスパスには複数のSLF4Jバインディングが含まれます。
クラスパスにはバインディングが1つしかありません。 複数のバインディングがある場合、バインディングとそれらの場所をリストする警告が表示されます。
たとえば、クラスパスに slf4j-jdk14.jar と slf4j-nop.jar のバインディングがある場合、次の警告が表示されます。
クラスパスでlog4j-over-slf4j.jarとバインドされたslf4j-log4j12.jarの両方を検出しました
log4jロガーコールをslf4jにリダイレクトするには、 log4j-over-slf4j.jar バインディングを使用する必要があります。slf4jコールをlog4jにリダイレクトするには、 slf4j-log4j12.jar バインディングを使用する必要があります。
したがって、クラスパスに両方を含めることはできません。 その場合、次の例外が発生します。