アプリケーションへのログインにslf4jを使用しています。slf4jの目的を取得します。現在どのlogging-libraryslf4jがバインドされているかを確認する方法を知りたいです。参照ライブラリにlog4jがあります。slf4jがlog4jにバインドされていると想定しています。
私が知りたいのは、このバインディングを明示的に確認する方法はありますか?
バインディングを検出するために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
のメソッドはおそらくあなたが探しているものですStaticLoggerBinder
。getLoggerFactoryClassStr()
簡単。ブレークポイントを..say..LOG.info(...)に設定します。デバッガーがそこで停止したら、..とビオラにステップインします。実際のロガーのコードに自分自身を見つけるでしょう...log4jまたはlogback..と言ってください。
これは、メインのslf4jパブリックAPIを使用して(つまり、内部StaticLoggerBinderなしで)行うことができます。たとえば、slf4jがlog4j2にbpoundしているかどうかを検出します。
if ("org.apache.logging.slf4j.Log4jLoggerFactory".equals(
org.slf4j.LoggerFactory.getILoggerFactory().getClass().getName()
)
{ ... }