簡體   English   中英

為什么Log4j中兩個Logger不按照級別拆分消息?

[英]Why two Loggers do not split messages according to their levels in Log4j?

我想將所有記錄器級別記錄到一個文件(FATAL-> ALL)並同時在控制台中顯示 ERROR 級別和更高級別。 我正在使用根記錄器將所有級別記錄到文件中,並使用單獨的記錄器將錯誤級別記錄到控制台。 我的 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] %highlight{%level}{FATAL=bg_red, ERROR=red, WARN=yellow, INFO=blue} %logger{36} - %msg%n" disableAnsi="false"/>
        </Console>

        <File name="File" fileName="output.log" bufferedIO="true" >
            <PatternLayout
                    pattern="%d{HH:mm:ss.SSS} [%t] %highlight{%level}{FATAL=bg_red, ERROR=red, WARN=yellow, INFO=blue} %logger{36} - %msg%n"/>
        </File>
    </Appenders>

    <Loggers>
        <Root level="ALL">
            <AppenderRef ref="File"/>
        </Root>

        <Logger name="com.danielk" level="ERROR">
            <AppenderRef ref="Console"/>
        </Logger>

    </Loggers>
</Configuration>

我希望文件中包含所有級別的日志記錄,並且控制台中只有“錯誤”和更高級別,但我在兩個(控制台和文件)上都只有“錯誤”級別:

23:19:54.422 [main] ERROR com.danilk.Example - 示例 23:19:54.434 [main] ERROR com.danielk.Main - 來自 M 的錯誤錯誤錯誤

消息本身是正確構建的,因為當我將兩個記錄器(根和附加)設置為“ALL”級別時,我可以看到所有類型的消息(不僅僅是“錯誤”級別)。

我應該怎么做才能拆分級別:

  1. 文件 - 所有級別
  2. 控制台 - 僅錯誤及以上?

您可以在控制台附加程序上使用ThresholdFilter過濾掉具有ERROR或更特定級別( https://logging.apache.org/log4j/2.x/manual/filters.html#ThresholdFilter )的日志事件。

整個配置例如:

<?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] %highlight{%level}{FATAL=bg_red, ERROR=red, WARN=yellow, INFO=blue} %logger{36} - %msg%n"
                    disableAnsi="false"/>
            <ThresholdFilter level="ERROR" onMatch="ACCEPT" onMismatch="DENY"/>
        </Console>
        <File name="File" fileName="output.log" bufferedIO="true" append="false">
            <PatternLayout
                    pattern="%d{HH:mm:ss.SSS} [%t] %highlight{%level}{FATAL=bg_red, ERROR=red, WARN=yellow, INFO=blue} %logger{36} - %msg%n"/>
        </File>
    </Appenders>
    <Loggers>
        <Root level="debug">
            <AppenderRef ref="File"/>
            <AppenderRef ref="Console"/>
        </Root>
    </Loggers>
</Configuration>

PS當你指定:

<Logger name="com.danielk" level="ERROR">
   <AppenderRef ref="Console"/>
</Logger>

然后將com.danielk中的所有子包和類的日志級別設置為ERROR (除非您配置更具體的記錄器,例如com.danielk.db.MyClass具有不同的級別)。 這就是日志文件中只出現錯誤的原因。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM