Tomcat 6を使用していて、JULをLog4j2(2.0ベータ3)に切り替えようとしています。ただし、これはまったく新しいプロジェクトであるため、ドキュメントは非常にまばらで、オンラインのリソースはまだ多くありません。
欲しいもの
- デバッグレベルを超えるすべてのイベントは、ディスク上のファイルに送信される必要があります。
- エラーはに移動する必要があり
syserr
ます。 - 情報から警告まですべてがに行く必要があり
sysout
ます。 - マークされた監査ログは、これをすべてスキップして、ディスク上の別のファイルに移動する必要があります。
私が試したこと
これは私の最初の試みlog4j2.xml
ファイルです:
何を書けばいいconfiguration status
ですか?それに関するいくつかのドキュメントはどこにありますか?
<?xml version="1.0" encoding="UTF-8"?>
<configuration status="info">
<appenders>
<Console name="Console-err" target="SYSTEM_ERR">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
<Console name="Console-out" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
<File name="MyFile" fileName="app.log">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</File>
</appenders>
<loggers>
<logger name="com.ecm" level="error" additivity="false">
<appender-ref ref="Console-err" />
<appender-ref ref="MyFile" />
</logger>
<root level="info">
<appender-ref ref="Console-out" />
<appender-ref ref="MyFile" />
</root>
</loggers>
</configuration>
ロガー名はJavaクラスとそのロガーとどのように関連していますか?
コード例:
package com.ecm.backend;
public final class Foo {
private static final Logger LOG = LogManager.getLogger(Foo.class);
public static void bar() {
LOG.error("this is error");
LOG.warn("this is warning");
}
}
これを実行すると、コンソールとログファイルに次のように表示されます。
10:22:49.385 [http-8080-3] ERROR com.ecm.backend.Foo - this is error
警告が無視されるのはなぜですか?
を削除するとadditivity="false"
、次のようになります。
10:26:51.388 [http-8080-1] ERROR com.ecm.backend.Foo - this is error
10:26:51.388 [http-8080-1] ERROR com.ecm.backend.Foo - this is error
警告は再び無視され、エラーが繰り返されます(予想どおり)。
私は何が間違っているのですか?
フォールドの下で:Tomcatの残りの部分はJULIを使用できますが、アプリケーションにはLog4j2が必要です。