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