一劳永逸 让SpringBoot项目所有框架使用logback打印日志

Maven全局排除依赖

Maven排除依赖的方式有三种

  1. 黑名单maven-enforcer-plugin,打包时发现在黑名单中的依赖就会提示报错,对开发很不友好
  2. executions标签,只能根据实际依赖单个排除,很繁琐
  3. 制作同名空jar包,根据maven的就近原则,用空jar包替换

使用同名空jar包替换的方式,实现全局排除依赖功能

  1. 任意创建一个空文件 (此方法部署在服务器上可能有问题,建议创建一个空类,如 __Empty__.class,打成一个工具jar),重命名为empty.jar

  2. 将empty.jar放在项目的lib目录下
    在这里插入图片描述

  3. 在pom文件中用dependency引入要排除的依赖

<!-- 如排除slf4j-jdk14 -->
<dependency>
	<groupId>org.slf4j</groupId>
	<artifactId>slf4j-jdk14</artifactId>
	<version>99.99.99</version><!-- 凭爱好写一个不存在的版本号即可 -->
	<scope>system</scope><!-- scope指定为system -->
	<systemPath>${basedir}/lib/empty.jar</systemPath><!-- 指定systemPath为空jar包 -->
</dependency>

pom.xml配置

spring-boot-starter-logging

springboot自带默认日志框架

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-logging</artifactId>
</dependency>

在这里插入图片描述
可见SpringBoot默认集成了logback日志框架,并把log4j和java.util.logging桥接到slf4j。

jcl-over-slf4j替换commons-logging

<dependency>
	<groupId>org.slf4j</groupId>
	<artifactId>jcl-over-slf4j</artifactId>
</dependency>
<dependency>
	<groupId>commons-logging</groupId>
	<artifactId>commons-logging</artifactId>
	<version>99.99.99</version>
	<scope>system</scope>
	<systemPath>${basedir}/lib/empty.jar</systemPath>
</dependency>
<dependency>
	<groupId>org.slf4j</groupId>
	<artifactId>slf4j-jcl</artifactId>
	<version>99.99.99</version>
	<scope>system</scope>
	<systemPath>${basedir}/lib/empty.jar</systemPath>
</dependency>

log4j-over-slf4j替换log4j

<dependency>
	<groupId>org.slf4j</groupId>
	<artifactId>log4j-over-slf4j</artifactId>
</dependency>
<dependency>
	<groupId>log4j</groupId>
	<artifactId>log4j</artifactId>
	<version>99.99.99</version>
	<scope>system</scope>
	<systemPath>${basedir}/lib/empty.jar</systemPath>
</dependency>
<dependency>
	<groupId>org.apache.logging.log4j</groupId>
	<artifactId>log4j-1.2-api</artifactId>
	<version>99.99.99</version>
	<scope>system</scope>
	<systemPath>${basedir}/lib/empty.jar</systemPath>
</dependency>
<dependency>
	<groupId>org.slf4j</groupId>
	<artifactId>slf4j-log4j12</artifactId>
	<version>99.99.99</version>
	<scope>system</scope>
	<systemPath>${basedir}/lib/empty.jar</systemPath>
</dependency>

jul-to-slf4j替换java.util.logging

由于spring-boot-starter-logging已包含jul-to-slf4j,所以只需要排除java.util.logging

<dependency>
	<groupId>org.slf4j</groupId>
	<artifactId>slf4j-jdk14</artifactId>
	<version>99.99.99</version>
	<scope>system</scope>
	<systemPath>${basedir}/lib/empty.jar</systemPath>
</dependency>

log4j-to-slf4j替换log4j-slf4j-impl

由于spring-boot-starter-logging已包含log4j-to-slf4j,所以只需要排除log4j-slf4j-impl

<dependency>
	<groupId>org.apache.logging.log4j</groupId>
	<artifactId>log4j-slf4j-impl</artifactId>
	<version>99.99.99</version>
	<scope>system</scope>
	<systemPath>${basedir}/lib/empty.jar</systemPath>
</dependency>

logback-spring.xml部分配置

<?xml version="1.0" encoding="UTF-8"?>
<configuration  scan="true" scanPeriod="10 seconds">
	<!-- 借助LevelChangePropagator完全消除禁用日志语句的60倍转换开销 -->
    <contextListener class="ch.qos.logback.classic.jul.LevelChangePropagator">
        <resetJUL>true</resetJUL>
    </contextListener>
    ...
    ...
    ...
</configuration>

最后声明

此教程未详细测试,如有任何问题,欢迎在评论区指出
2021-12-12更新 此教程已在线上运行,未发现问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值