如何在log4j2中将不同的日志级别写入不同的滚动文件

时间:2020-03-12 21:59:08

标签: log4j2 log-level

我有一个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标记。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

您不应将调试日志获取到任何文件,因为没有记录器被配置为接受调试消息。如果您在文件中看到它们,则说明未使用此配置。您可以通过将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>
相关问题