0

我的目标:

实现所有自定义、内置记录器到来自同一个包的不同文件。

  1. 信息 - 信息日志文件
  2. 调试 - 调试日志文件
  3. perf - perf 日志文件 - 自定义一个

我尝试了什么:

<?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] %-5level %c{36} - %msg%n" />
        </Console>
        <RollingFile name="RollingDebugFile"
            fileName="logs/application-debug.log"
            filePattern="logs/application-debug%d{yyyy-MM-dd-HH-mm}.log"
            append="true">
            <Filters>
                <ThresholdFilter level="DEBUG" />
                <ThresholdFilter level="INFO" onMatch="DENY"
                    onMismatch="NEUTRAL" />
            </Filters>
            <PatternLayout>
                <Pattern>%d{HH:mm:ss.SSS} [%t] %-5level %c{36} %l: %msg%n</Pattern>
            </PatternLayout>
            <Policies>
                <TimeBasedTriggeringPolicy interval="1"
                    modulate="true" />
            </Policies>
        </RollingFile>
        <RollingFile name="RollingInfoFile"
            fileName="logs/application-info.log"
            filePattern="logs/application-info%d{yyyy-MM-dd-HH-mm}.log"
            append="true">
            <Filters>
                <ThresholdFilter level="INFO" />
                <ThresholdFilter level="WARN" onMatch="DENY"
                    onMismatch="NEUTRAL" />
            </Filters>
            <PatternLayout>
                <Pattern>%d{HH:mm:ss.SSS} [%t] %-5level %c{36} %l: %msg%n</Pattern>
            </PatternLayout>
            <Policies>
                <TimeBasedTriggeringPolicy interval="1"
                    modulate="true" />
            </Policies>
        </RollingFile>
    </Appenders>

    <Loggers>
        <Logger name="testlog4j2" additivity="false">
            <AppenderRef ref="RollingDebugFile" level="debug" />
            <AppenderRef ref="Console" />
        </Logger>
        <Logger name="testlog4j2" additivity="false">
            <AppenderRef ref="RollingInfoFile" level="info" />
            <AppenderRef ref="Console" />
        </Logger>
        <Root level="ALL">
            <AppenderRef ref="Console" />
        </Root>
    </Loggers>
</Configuration>

这里的问题:

记录器名称相同。因此最新的记录器只能工作。在这种情况下,信息有效,但也不能调试。

我的疑问:

我参考了很多帖子。我认为下面的事情有效。

  1. 将每一个都设为自定义记录器,如此所述。但我确定这是否是正确的解决方案?
  2. 关于 log4j2.xml 文件,我的方法是否正确?我是新手,所以请提供任何建议。
4

1 回答 1

0

在深入研究之后,我发现我必须使用以下内容。否则记录器将被覆盖

<Logger name="testlog4j2" additivity="false">
        <AppenderRef ref="RollingDebugFile" level="debug" />
        <AppenderRef ref="RollingInfoFile" level="info" />
        <AppenderRef ref="RollingWarnFile" level="warn" />
        <AppenderRef ref="Console" />
    </Logger>
于 2020-08-14T17:03:20.143 回答