亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么兩個 Logger 不根據 Log4j 中的級別拆分消息?

為什么兩個 Logger 不根據 Log4j 中的級別拆分消息?

拉丁的傳說 2023-08-09 15:33:16
我想將所有記錄器級別記錄到文件中(FATAL-> ALL),并同時在控制臺中顯示錯誤級別及更高級別。我使用根記錄器將所有級別記錄到文件中,并使用單獨的記錄器將錯誤級別記錄到控制臺。我的 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] 錯誤 com.danielk.Example - 示例中的錯誤錯誤 23:19:54.434 [main] 錯誤 com.danielk.Main - 錯誤 ERROR ERROR FROM MAIN消息本身是正確構建的,因為當我將兩個記錄器(根記錄器和附加記錄器)設置為“全部”級別時,我可以看到所有類型的消息(不僅僅是“錯誤”級別)。我應該怎么做來分層:文件 - 所有級別控制臺 - 僅錯誤及以上錯誤?
查看完整描述

1 回答

?
aluckdog

TA貢獻1847條經驗 獲得超7個贊

您可以ThresholdFilter在控制臺附加程序上使用來過濾掉具有ERROR或更特定級別的日志事件

整個配置例如:

<?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>

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


查看完整回答
反對 回復 2023-08-09
  • 1 回答
  • 0 關注
  • 134 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號