1

アプリで log4j をセットアップしようとしていますが、サード パーティの JAR の 1 つが何らかの理由でログ レベルを「オフ」にし続けているようです。そのライブラリのコードが実行されたときにのみ発生します。名前を知っているロガーを使用しておらず、ルートロガーを使用していないため、これを行う方法がわかりません。私はこれに 5 時間を費やしましたが、これまでのところ私の唯一の成果は 9000 を超えるフラストレーション レベルを獲得したことです。

Windows 7 64 ビット、Java 6 u23 で最新の Tomcat (7.0.37) を使用しています。

log4j.プロパティ:

log4j.logger.com.foo.bar.SearchAndReport=TRACE, stdout, file

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n

log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=D:/logTest.log
log4j.appender.file.MaxFileSize=100KB
log4j.appender.file.MaxBackupIndex=1
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=[%p] %d{dd MMM yyyy HH:mm:ss,SSS} - %C{2}.%M() - %m %n

次に、テスト用のサーブレットに次のものがあります。

Logger log = Logger.getLogger(SearchAndReport.class);
System.out.println(log.getLevel());

このコードは、DoPost または DoGet が実行されるたびに実行され、レベルは、サード パーティのコードが実行されてオフになるまで、設定したレベル (TRACE) のままです。

私の質問は次のとおりです。

  1. 自分で名前を付けてセットアップしたロガーに別のロガーがどのように干渉することができますか?
  2. どうすればこれを止めて、設定したレベルを強制できますか?

ありがとう :)

4

1 に答える 1

2
  1. Log4j 構成がマージされていません。他の構成が存在し、自分の構成ではなく読み取られているか、構成が上書きされているようです。JAR に log4j 構成ファイルを埋め込むと、多くの同様の問題が発生します。

  2. org.apache.log4j.PropertyConfiguratorまたはを使用して、コード内の構成をリロードできますorg.apache.log4j.xml.DOMConfigurator。サードパーティのコードがそれらを使用していないかどうかも確認してください。

于 2013-03-19T12:33:51.823 に答える