为什么两个 Logger 不根据 Log4j 中的级别拆分消息?

我想将所有记录器级别记录到文件中(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. 文件 - 所有级别

  2. 控制台 - 仅错误及以上错误?



拉丁的传说
浏览 81回答 1
1回答

aluckdog

您可以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使用不同的级别)。这就是日志文件中只出现错误的原因。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java