15

log4jに支えられたSLF4jをロギングフレームワークとして使用しています。私の問題は、実行時にロガーのログ レベルを変更する方法を探していることです。

私は、slf4j が独自の API を介して直接これを許可していないことを理解しています。そのため、ロギング プロバイダーに直接アクセスする必要があります。個人的には、これが slf4j の大きな欠点だと思います。私の質問は、slf4j を使用してどのプロバイダーを使用しているかをプログラムで判断するにはどうすればよいですか? slf4j を使用する最大の目的は、プロバイダーにとらわれないようにすることです。何も再コーディングすることなく、お気に入りのログ システムを簡単に切り替えることができます。しかし、今、log4j を直接呼び出さなければならない場合、その能力が失われています。

少なくとも、log4j をプロバイダーとして使用しているかどうかを判断し、使用している場合は、ユーザーがログ レベルを切り替えられるようにしたいと考えています。

もしそうなら LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME)、結果はのインスタンスでorg.slf4j.impl.Log4jLoggerAdapterあり、偶数ではありませんorg.apache.log4j.Logger(私が望んでいた/期待していたように)。

これを見つける方法はありますか?

ありがとう、エリック

4

1 に答える 1

13

SLF4Jは、アプリケーションではなくライブラリの抽象化として設計されています(もちろん、一貫性を保つために、独自のアプリのロギング呼び出しでSLF4Jを使用できます。使用する必要があります)。独自のアプリでは、基盤となるロガーフレームワークを選択するため、logging-config固有の部分でlog4jAPIにアクセスするのは問題ありません。

ライブラリがロギング設定IMHOを変更することをいじくり回してはならないので、SLF4JAPI上にあることは適切ではありません。

于 2012-06-21T19:17:57.710 に答える