私は2つのことをしたいです:
コンソールロギングは正常に機能しているように見えますが、ログファイルは空のままです。
これは私のlog4j2.xmlです
<?xml version="1.0" encoding="UTF-8"?>
<configuration status="WARN">
<appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
<File name="MyFile" fileName="logs/app.log" immediateFlush="true">
<PatternLayout pattern="%d{yyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</File>
</appenders>
<loggers>
<logger name="filelogger" level="error">
<appender-ref ref="MyFile"/>
</logger>
<root level="info">
<appender-ref ref="Console"/>
</root>
</loggers>
</configuration>
何が悪いのでしょうか?
私はそれを考え出した! <Logger>
タグはこの場合は使用しないでください。詳細については、Gaurang Patelの回答を参照してください。
<?xml version="1.0" encoding="UTF-8"?>
<configuration status="WARN">
<appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
<File name="MyFile" fileName="logs/app.log">
<PatternLayout pattern="%d{yyyy-mm-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</File>
</appenders>
<loggers>
<root level="debug">
<appender-ref ref="Console" level="info"/>
<appender-ref ref="MyFile" level="error"/>
</root>
</loggers>
</configuration>
Dakerは修正された構成ファイルを入れましたが、説明しませんでした。ここに説明を加えたいと思います。 Log4j2 Documentation here に引用されているように、特定の要件では<Logger>タグの使用は必要ありませんでした。さらにいつ<Logger>タグを使用する必要がありますか?以下の説明をドキュメントから読んでください。
おそらく、com.foo.Bar以外のすべてからTRACE出力をすべて削除することが望まれます。ログレベルを変更するだけでは、タスクは完了しません。代わりに、解決策は新しいロガー定義を構成に追加することです。
<Loggers>
<Logger name="com.foo.Bar" level="TRACE"/>
<Root level="ERROR">
<AppenderRef ref="STDOUT">
</Root>
...
</Loggers>
<logger name="filelogger" level="error" >
これが問題になるはずです。ロガーの名前は通常、パッケージ名です(特にfilelogger
という名前を付けていない場合)。
試して_<logger name="com.yourpackage" level="error" additivity="true">
参照 Log4j2 Doc
私が使う <ThresholdFilter />
および<AppenderRef level="">
これをする
[〜#〜] see [〜#〜]
<ThresholdFilter level = "error" onMatch = "DENY" onMismatch = "ACCEPT" />
<AppenderRef ref = "fileLogger" level = "info" />
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="error" monitorInterval="5"> <!-- status:error mean ONLY show log4j kernel's error log in console-->
<Properties>
<Property name="APP_LOG_ROOT">Your log's path</Property>
</Properties>
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n" />
</Console>
<RollingFile name="fileLogger" fileName="${APP_LOG_ROOT}/app.log" filePattern="${APP_LOG_ROOT}/app-%d{yyyy-MM-dd}.log">
<!-- Except Error -->
<ThresholdFilter level="error" onMatch="DENY" onMismatch="ACCEPT"/>
<PatternLayout>
<pattern>%d{yyy-MM-dd HH:mm:ss.SSS} [%t] %level %logger{36} - %msg%n</pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy interval="1" modulate="true" />
</Policies>
</RollingFile>
<RollingFile name="errorLogger" fileName="${APP_LOG_ROOT}/error.log" filePattern="${APP_LOG_ROOT}/error-%d{yyyy-MM-dd}.log">
<PatternLayout>
<pattern>%d{yyy-MM-dd HH:mm:ss.SSS} [%t] %level %logger{36} - %msg%n</pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy interval="1" modulate="true" />
</Policies>
</RollingFile>
</Appenders>
<Loggers>
<Root level="trace" >
<AppenderRef ref="Console" level="trace" />
<AppenderRef ref="fileLogger" level="info" />
<AppenderRef ref="errorLogger" level="error" />
</Root>
</Loggers>
</Configuration>