56

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

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

4

4 に答える 4

70

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

final StaticLoggerBinder binder = StaticLoggerBinder.getSingleton();

これで、私の場合の実際の実装を調べてみることができます。

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

これは印刷します:

ch.qos.logback.classic.LoggerContext[default]
ch.qos.logback.classic.selector.DefaultContextSelector
于 2012-05-08T19:58:04.193 に答える
8

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

于 2012-05-08T19:58:13.247 に答える
3

簡単。ブレークポイントを..say..LOG.info(...)に設定します。デバッガーがそこで停止したら、..とビオラにステップインします。実際のロガーのコードに自分自身を見つけるでしょう...log4jまたはlogback..と言ってください。

于 2016-07-20T16:00:19.943 に答える
3

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

if ("org.apache.logging.slf4j.Log4jLoggerFactory".equals(
    org.slf4j.LoggerFactory.getILoggerFactory().getClass().getName()
) 
{ ... }
于 2019-05-14T16:51:31.880 に答える