记一次项目日志切换为log4j2遇到的坑
背景
在一次学习disruptor的过程中,意外点了一个链接,进入了美团技术团队的一篇文章,文章主要讲述的是disruptor3.3.4+在log4j2中的应用,文章提到log4j2使用的是disruptor进行线程间通信的,由于本人对新东西有很高兴趣,就去研究了下log4j2
新建项目
目录结构如下:
根据官网文档说明,log4j2.9.x+ 的依赖需要使用disruptor3.3.4+的依赖,于是项目中导入依赖如下:
<dependency>
<groupId>com.lmax</groupId>
<artifactId>disruptor</artifactId>
<version>3.4.2</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.13.3</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.13.3</version>
</dependency>
添加log4j2配置文件
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss} [%t] %-20level %logger{36} - %msg%n"/>
</Console>
</Appenders>
<Loggers>
<Root level="error">
<AppenderRef ref="Console"/>
</Root>
</Loggers>
</Configuration>
测试例子
public class Test01 {
private static final Logger logger = LogManager.getLogger(Test01.class.getName());
public static void main(String[] args) {
logger.trace("我是trace");
logger.info("我是info信息");
logger.error("我是error");
logger.fatal("我是fatal");
logger.trace("退出程序.");
logger.exit();
}
}
结果
可是运行Test01之后打印的日志始终为
14:25:30.462 [main] INFO com.bonc.disruptor.test.Test01 - 我是info信息
14:25:30.466 [main] ERROR com.bonc.disruptor.test.Test01 - 我是error
14:25:30.466 [main] ERROR com.bonc.disruptor.test.Test01 - 我是fatal
与自己在xml文件中假的格式不符(特意加了%-20,好区分)
经过debug调试发现,如图信息:
到这,明显感觉到
<artifactId>spring-boot-starter</artifactId>
包里面 有额外的slf4j包在作怪,但是具体不知道是哪个!!!
因为Test01的开头只用到了两个引用
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
所以怀疑是org.apache.logging.log4j包下面仍有slf4j包,于是寻找项目依赖:
发现存在着这样一个依赖,于是尝试了下在pom.xml中添加依赖移除配置:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<!-- 他娘的,原来是你在作妖 -->
<exclusions>
<exclusion>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-to-slf4j</artifactId>
</exclusion>
</exclusions>
</dependency>
最后运行Test01发现,结果生效
14:34:55 [main] ERROR com.bonc.disruptor.test.Test01 - 我是error
14:34:55 [main] FATAL com.bonc.disruptor.test.Test01 - 我是fatal
哈哈哈哈,问题完美解决!!!!!!!!!!!!!!!!