0

Log4j を学習していますが、デバッグ メッセージが 2 回表示される理由を理解しようとしています。additivty について読み、ログが親 (この場合は "root") に伝達されることを理解しています。ただし、「ルート」のレベルは致命的であるため、このロギング リクエストはフィルタリングされるべきではありませんか?

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration>
    <appender name="dataAccessLogger" class="org.apache.log4j.ConsoleAppender">
        <layout class="org.apache.log4j.PatternLayout">
            <param name="conversionPattern" value="%m%n" />
        </layout>
    </appender>

    <logger name="com.supertrooper">
        <level value="debug" />
        <appender-ref ref="dataAccessLogger" />
    </logger>

    <root>
        <level value="fatal" />
        <appender-ref ref="dataAccessLogger" />
    </root>
</log4j:configuration>

コード:

// Field in class
private static Logger logger = Logger.getLogger(Log4JTesting.class);

// How I use it
logger.debug("Hello world!-----------------");
4

1 に答える 1

1

ロガーはルートcom.supertrooperロガーからアペンダーを継承するため、同じアペンダーを子ロガーに明示的に追加する必要はありません。これを行うと、例のように、メッセージが重複することになります。

ルートロガーが「致命的」に設定されているという事実は、そのアペンダーが子に継承されるという事実を変更しません(設定されているログレベルに関係なく)。アペンダーがどのロガーから来たかに関係なく、致命的なメッセージのみをログに記録するようにしたい場合は、アペンダー自体にしきい値を設定する必要があります。

于 2012-09-08T11:46:28.417 に答える