记一次项目日志切换为log4j2遇到的坑

记一次项目日志切换为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

哈哈哈哈,问题完美解决!!!!!!!!!!!!!!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值