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