来自未知来源的log4j2日志

时间:2018-07-06 13:15:09

标签: java xml log4j2

我正在尝试学习日志记录(log4j2)

这是我的log4j2配置XML文件

log4j2_config_6_appenders.xml

<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
    <Appenders>
        <Console name="Console1_sout" target="SYSTEM_OUT">
            <PatternLayout pattern="[Console1_sout] %d{yyyy-MMM-dd HH:mm:ss a} [%t] %-5level %logger{36} - %msg%n"/>
        </Console>
        <Console name="Console2_serr" target="SYSTEM_ERR">
            <PatternLayout pattern="[Console2_serr] %d{yyyy-MMM-dd HH:mm:ss a} [%t] %-5level %logger{36} - %msg%n"/>
        </Console>
    </Appenders>
    <Loggers>
        <Logger name="logger1_sout" level="trace">
            <AppenderRef ref="Console1_sout"/>
        </Logger>
        <Logger name="logger2_serr" level="trace">
            <AppenderRef ref="Console2_serr"/>
        </Logger>
    </Loggers>
</Configuration>

这是我的考验

    @Test
    public void test_consoleAppender() {
        setLog4j2ConfigFile("log4j2_config_6_appenders.xml");
        final Logger logger1_sout = LogManager.getLogger("logger1_sout");
        final Logger logger2_serr = LogManager.getLogger("logger2_serr");
        final Logger[] loggers = new Logger[]{logger1_sout, logger2_serr};
        for (Logger logger : loggers) {
            logger.trace("This is a trace message");
            logger.debug("This is a debug message");
            logger.info("This is an info message");
            logger.warn("This is a warning message");
            logger.error("This is an error message");
            logger.fatal("This is a fatal message");
            System.out.println();
        }
    }

这是输出

[Console1_sout] 2018-Jul-06 16:12:49 PM [main] TRACE logger1_sout - This is a trace message
16:12:49.545 [main] TRACE logger1_sout - This is a trace message
[Console1_sout] 2018-Jul-06 16:12:49 PM [main] DEBUG logger1_sout - This is a debug message
16:12:49.547 [main] DEBUG logger1_sout - This is a debug message
[Console1_sout] 2018-Jul-06 16:12:49 PM [main] INFO  logger1_sout - This is an info message
16:12:49.547 [main] INFO  logger1_sout - This is an info message
[Console1_sout] 2018-Jul-06 16:12:49 PM [main] WARN  logger1_sout - This is a warning message
16:12:49.547 [main] WARN  logger1_sout - This is a warning message
[Console1_sout] 2018-Jul-06 16:12:49 PM [main] ERROR logger1_sout - This is an error message
16:12:49.547 [main] ERROR logger1_sout - This is an error message
[Console1_sout] 2018-Jul-06 16:12:49 PM [main] FATAL logger1_sout - This is a fatal message
16:12:49.547 [main] FATAL logger1_sout - This is a fatal message

16:12:49.548 [main] TRACE logger2_serr - This is a trace message
16:12:49.548 [main] DEBUG logger2_serr - This is a debug message
16:12:49.548 [main] INFO  logger2_serr - This is an info message
16:12:49.548 [main] WARN  logger2_serr - This is a warning message
16:12:49.548 [main] ERROR logger2_serr - This is an error message
16:12:49.548 [main] FATAL logger2_serr - This is a fatal message


[Console2_serr] 2018-Jul-06 16:12:49 PM [main] TRACE logger2_serr - This is a trace message
[Console2_serr] 2018-Jul-06 16:12:49 PM [main] DEBUG logger2_serr - This is a debug message
[Console2_serr] 2018-Jul-06 16:12:49 PM [main] INFO  logger2_serr - This is an info message
[Console2_serr] 2018-Jul-06 16:12:49 PM [main] WARN  logger2_serr - This is a warning message
[Console2_serr] 2018-Jul-06 16:12:49 PM [main] ERROR logger2_serr - This is an error message
[Console2_serr] 2018-Jul-06 16:12:49 PM [main] FATAL logger2_serr - This is a fatal message

问题

为什么会有既不包含“ [Console2_serr]”也不包含“ [Console1_sout]”的日志?

1 个答案:

答案 0 :(得分:0)

可能是因为缺少可加性和根记录器配置。

<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
    <Appenders>
        <Console name="Console1_sout" target="SYSTEM_OUT">
            <PatternLayout pattern="[Console1_sout] %d{yyyy-MMM-dd HH:mm:ss a} [%t] %-5level %logger{36} - %msg%n"/>
        </Console>
        <Console name="Console2_serr" target="SYSTEM_ERR">
            <PatternLayout pattern="[Console2_serr] %d{yyyy-MMM-dd HH:mm:ss a} [%t] %-5level %logger{36} - %msg%n"/>
        </Console>
    </Appenders>
    <Loggers>
        <Logger name="logger1_sout" level="trace" additivity="false">
            <AppenderRef ref="Console1_sout"/>
        </Logger>
        <Logger name="logger2_serr" level="trace" additivity="false">
            <AppenderRef ref="Console2_serr"/>
        </Logger>
         <Root level="trace" additivity="false">
              <AppenderRef ref="Console1_sout"/>
              <AppenderRef ref="Console2_serr"/>
         </Root>
    </Loggers>
</Configuration>

尝试类似这样的方法。 可加性使您可以在第一时间使用日志行,并防止其他记录器拦截。