【问题标题】:Avoid writing Error messages if level="info" in log4j2如果 level="info" 在 log4j2 中避免写入错误消息
【发布时间】:2018-10-22 08:56:17
【问题描述】:

我想为信息日志和错误日志维护单独的日志文件。但是我不希望将错误日志写入信息日志文件,即当 level="info" 时,我不希望将错误日志写入文件。

<RollingFile name="Filer"  fileName="logs/info.log"
        filePattern="logs/info-%d{yyyy-MM-dd}-%i.log">
        <PatternLayout>
            <Pattern>${PATTERN}</Pattern>
        </PatternLayout>
        <Policies>
            <TimeBasedTriggeringPolicy interval="1" />
            <SizeBasedTriggeringPolicy size="${SIZE}" />
        </Policies>
        <DefaultRolloverStrategy max="5" />
    </RollingFile>

<RollingFile name="App"  fileName="logs/error.log"
        filePattern="logs/error-%d{yyyy-MM-dd}-%i.log">
        <PatternLayout>
            <Pattern>${PATTERN}</Pattern>
        </PatternLayout>
        <Policies>
            <TimeBasedTriggeringPolicy interval="1" />
            <SizeBasedTriggeringPolicy size="${SIZE}" />
        </Policies>
        <DefaultRolloverStrategy max="5" />
    </RollingFile>
<Loggers>       
    <Logger name="org.pro" level="info" additivity="false">
        <AppenderRef ref="File" level="info" />
        <AppenderRef ref="App" level="error" />
    </Logger>
</Loggers>
<Root level="info" additivity="false">
            <AppenderRef ref="FileAppender" />
</Root>

虽然我能够生成不同的日志文件。 error.log 文件正确生成,只有错误日志。但 info.log 包含信息和错误日志。

【问题讨论】:

    标签: java logging configuration log4j log4j2


    【解决方案1】:

    您必须将两者分开 &lt;Loggers&gt;

    像这样:

    <Loggers>       
        <Logger name="org.pro" level="INFO" additivity="false">
            <AppenderRef ref="Filer" />
        </Logger>
        <Logger name="org.pro" level="ERROR" additivity="false">
            <AppenderRef ref="App" />
        </Logger>
    </Loggers>
    

    上面将在logs/info.log 文件中记录INFO,在logs/error.log 文件中记录错误。

    【讨论】:

    • 谢谢。但是这种方式 info.log 仍然会同时生成 info 和错误日志。并且生成的 error.log 是空的。
    • 所以如果没有任何 ERROR 级别的日志,那么它就是空的。两者都会生成。如果您不希望其中任何一个删除 RollingFile
    • 问题在于,当我们有 level="info" 时,log4j2 会将所有消息,包括 info、debug、error 提取到文件中。在这里我不希望错误消息进入日志文件。
    • 使用上面的代码 info.log 应该只有 INFO 消息。请检查一次生成文件的包含。
    • 这解决了问题&lt;Filters&gt; &lt;ThresholdFilter level="ERROR" onMatch="DENY" onMismatch="NEUTRAL"/&gt; &lt;/Filters&gt;
    猜你喜欢
    • 2013-08-09
    • 2012-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多