アプリケーションへのログインにslf4jを使用しています。 slf4jの目的がわかります。 slf4jが現在バインドしているログライブラリを見つける方法を知りたいのですが。参照ライブラリにlog4jがあります。 slf4jがlog4jにバインドされていると想定しています。
私が知りたいのは、このバインディングを明示的に確認する方法はありますか?
バインディングを検出するために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
StaticLoggerBinder
's 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()
)
{ ... }