先说问题:
原来线上用的是log4j1,有一个日志文件是根据日志名,单独打印到一个日志文件中的。
比如:
@Slf4j
public class OperationLogger {
private static Logger operationlog = LoggerFactory.getLogger("operationLog");
public static void info(HouseOperationLog bean) {
bean.setPostDate(new Date());
log.info("xxxx");//该日志打印到root日志文件中
operationlog.info(JSONObject.toJSONString(bean));//该日志打印到operationLog单独指定的文件中
}
切换为log4j2之后,由于配置文件中,logger的name配置错误,配置成了类名,而不是指定的log的name,导致对应的日志没有打印到单独的文件中
<Logger name="com.xxx.log.Bar"
例子:log4j2.xml配置文件
<?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 %logger{36} - %msg%n"/>
</Console>
<Console name="bar" target="SYSTEM_OUT">
<PatternLayout pattern="bar logger %d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
</Appenders>
<Loggers>
<Logger name="com.xxx.log.Bar" level="info" additivity="false">
<AppenderRef ref="Console"/>
</Logger>
<Logger name="bar" level="info" additivity="true">
<AppenderRef ref="bar"/>
</Logger>
<Root level="error">
<AppenderRef ref="Console"/>
</Root>
</Loggers>
</Configuration>
对应的代码:
package com.xxx.log;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class Bar {
static final Logger logger = LogManager.getLogger(Bar.class);
static final Logger logger_bar = LogManager.getLogger("bar");
public boolean doIt() {
logger.entry();
logger.error("Did it again!");
logger_bar.info("test bar log ... ");
return logger.exit(false);
}
public static void main(String[] args) {
new Bar().doIt();
}
}
打印结果:
16:38:02.296 [main] ERROR com.xxx.log.Bar - Did it again!
bar logger 16:38:02.298 [main] INFO bar - test bar log ...
16:38:02.298 [main] INFO bar - test bar log ...
参考地址:
Log4j 2 Tutorial: Configuration Example for Logging in Java - Sematext