【问题标题】:How to write different log levels into different rolling files in log4j2如何在log4j2中将不同的日志级别写入不同的滚动文件
【发布时间】:2020-03-12 21:59:08
【问题描述】:

我有一个log4j2.xml如下:

<?xml version="1.0" encoding="UTF-8"?>
    <Configuration>
        <Properties>
            <Property name="dir" value="/var/log/sunverge" />
            <Property name="file" value="maggie.log" />
            <Property name="eatonemcbfile" value="eaton.log" />
        </Properties>

        <Appenders>
            <Console name="STDOUT" target="SYSTEM_OUT">
                <PatternLayout pattern="%d{ISO8601} %5p [%t] %c - %m%n" />
            </Console>
            <RollingFile name="file" fileName="${dir}/${file}"
                filePattern="${dir}/${file}.%d{yyyy-MM-dd}">
                <PatternLayout>
                    <Pattern>%d{ISO8601} %5p [%t] %c - %m%n</Pattern>
                </PatternLayout>
                <Policies>
                    <TimeBasedTriggeringPolicy interval="1" />
                </Policies>
            </RollingFile>
            <RollingFile name="eaton"
                fileName="${dir}/${eatonemcbfile}"
                filePattern="${dir}/${eatonemcbfile}.%d{yyyy-MM-dd}">
                <PatternLayout>
                    <Pattern name="ConversionPattern"> %d{ISO8601} %5p [%t] %c - %m%n</Pattern>
                </PatternLayout>
                <ThresholdFilter level="debug"/>
                <Policies>
                    <TimeBasedTriggeringPolicy interval="1" />
                </Policies>
            </RollingFile>
        </Appenders>

        <Loggers>
            <Root level="warn">
                <AppenderRef ref="file" />
            </Root>
            <logger name="com.sunverge.devices.eaton.emcb" level="info">
                <AppenderRef ref="eaton" />
                <AppenderRef ref="file" />
            </logger>
        </Loggers>
    </Configuration>

但是,我将eaton.log 的阈值设置为调试,但它们都记录了调试级别。出于某种原因,我不想为另一个文件添加 ThresholdFilter 标记。任何帮助表示赞赏。

【问题讨论】:

    标签: log4j2 log-level


    【解决方案1】:

    您不应将调试日志添加到您的任何文件中,因为您的任何记录器均未配置为接受调试消息。如果您在文件中看到它们,则未使用此配置。您可以通过将 status="debug" 添加到配置元素并查看 Log4j 正在配置的内容来验证它是否正在使用。如果您没有看到 log4j 调试输出,那么这是配置文件没有被使用的明确标志。您还可以将 -Dlog4j2.debug=true 添加到命令行,这将导致输出 log4j 日志。您可以检查它以查看配置的来源。

    我建议您将配置更改为:

        <Appenders>
            <Console name="STDOUT" target="SYSTEM_OUT">
                <PatternLayout pattern="%d{ISO8601} %5p [%t] %c - %m%n" />
            </Console>
            <RollingFile name="file" fileName="${dir}/${file}"
                filePattern="${dir}/${file}.%d{yyyy-MM-dd}">
                <PatternLayout>
                    <Pattern>%d{ISO8601} %5p [%t] %c - %m%n</Pattern>
                </PatternLayout>
                <Policies>
                    <TimeBasedTriggeringPolicy interval="1" />
                </Policies>
            </RollingFile>
            <RollingFile name="eaton"
                fileName="${dir}/${eatonemcbfile}"
                filePattern="${dir}/${eatonemcbfile}.%d{yyyy-MM-dd}">
                <PatternLayout>
                    <Pattern name="ConversionPattern"> %d{ISO8601} %5p [%t] %c - %m%n</Pattern>
                </PatternLayout>
                <Policies>
                    <TimeBasedTriggeringPolicy interval="1" />
                </Policies>
            </RollingFile>
        </Appenders>
    
        <Loggers>
            <Root level="warn">
                <AppenderRef ref="file" />
            </Root>
            <logger name="com.sunverge.devices.eaton.emcb" level="debug" additivity="false">
                <AppenderRef ref="eaton" level="debug"/>
                <AppenderRef ref="file" level="info"/>
            </logger>
        </Loggers>
    </Configuration>
    

    【讨论】:

      猜你喜欢
      • 2012-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-25
      • 1970-01-01
      • 1970-01-01
      • 2022-10-14
      • 1970-01-01
      相关资源
      最近更新 更多