Logback – 重複するログメッセージ
シンプルなJavaアプリケーションをレビューし、Logbackを介してメッセージを記録します。
App.java
package com.mkyong.test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class App {
private static final Logger log = LoggerFactory.getLogger(App.class);
public static void main(String[]args) {
log.debug("Testing");
}
}
P.S Logback 1.1.2
でテスト済み
1.問題
コンソールにメッセージを記録する単純な
logback.xml
。
logback.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>
%d{yyyy-MM-dd HH:mm:ss}[%thread]%-5level %logger{36} - %msg%n
</Pattern>
</layout>
</appender>
<logger name="com.mkyong.test" level="debug">
<appender-ref ref="STDOUT"/>
</logger>
<root level="error">
<appender-ref ref="STDOUT"/>
</root>
</configuration>
上記のプログラムを実行すると、Logbackはメッセージを2回記録しますか?
2015-01-25 13:55:21[main]DEBUG com.mkyong.test.App - Testing 2015-01-25 13:55:21[main]DEBUG com.mkyong.test.App - Testing
2.解決策
これはhttp://logback.qos.ch/manual/configuration.html#cumulative[Appenders accumulate]によって発生します。これを修正するには、アプリケーションロガーに `additivity =” false “`を追加します
logback.xml
<logger name="com.mkyong.test" level="debug" additivity="false">
<appender-ref ref="STDOUT"/>
</logger>
<root level="error">
<appender-ref ref="STDOUT"/>
</root>
出力
2015-01-25 13:58:24[main]DEBUG com.mkyong.test.App - Testing