web-dev-qa-db-ja.com

slf4jがバインドされているライブラリを見つける方法は?

アプリケーションへのログインにslf4jを使用しています。 slf4jの目的がわかります。 slf4jが現在バインドしているログライブラリを見つける方法を知りたいのですが。参照ライブラリにlog4jがあります。 slf4jがlog4jにバインドされていると想定しています。

私が知りたいのは、このバインディングを明示的に確認する方法はありますか?

43
psykeron

バインディングを検出するためにSLF4Jが行うことを実行するだけです。

final StaticLoggerBinder binder = StaticLoggerBinder.getSingleton();

これで、実際の実装が何であるかを調べることができます logback 私の場合:

System.out.println(binder.getLoggerFactory());
System.out.println(binder.getLoggerFactoryClassStr());

これは印刷します:

ch.qos.logback.classic.LoggerContext[default]
ch.qos.logback.classic.selector.DefaultContextSelector
53

StaticLoggerBinder 's getLoggerFactoryClassStr() メソッドはおそらくあなたが探しているものです。

8
leedm777

簡単。ブレークポイントを..say .. LOG.info(...)に置きます。デバッガーがそこで停止したら、..とビオラ..に足を踏み入れます。実際のロガーのコードが表示されます... log4jまたはlogback ..と言ってください。

2
Apurva Singh

メインのslf4jパブリックAPIを使用して(つまり、内部のStaticLoggerBinderなしで)これを行うことができます。 slf4jがlog4j2へのbpoundを持っているかどうかを検出するには:

if ("org.Apache.logging.slf4j.Log4jLoggerFactory".equals(
    org.slf4j.LoggerFactory.getILoggerFactory().getClass().getName()
) 
{ ... }
1
Ben Spiller