我正在尝试学习日志记录(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]”的日志?
答案 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>
尝试类似这样的方法。 可加性使您可以在第一时间使用日志行,并防止其他记录器拦截。