文章目录
- [Spring Boot 3.0 版本SLF4J 对于JUL 日志 Over的处理问题解决](#Spring Boot 3.0 版本SLF4J 对于JUL 日志 Over的处理问题解决)
Spring Boot 3.0 版本SLF4J 对于JUL 日志 Over的处理问题解决
问题背景
升级Spring Boot 到 3.3.1 版本后,发现原来的JUL日志输出无法在Over到SLF4J的实现类。
问题调研
通过多个Spring Boot的版本比对,发现自3.0版本开始,Spring Boot就移除了org.springframework.boot.logging.Slf4JLoggingSystem
类,在3.0 版本前,Spring Boot 由该类的configureJdkLoggingBridgeHandler()
方法来完成JUL日志出配置处理。
相关代码
java
private void configureJdkLoggingBridgeHandler() {
try {
if (isBridgeJulIntoSlf4j()) {
removeJdkLoggingBridgeHandler();
SLF4JBridgeHandler.install();
}
}
catch (Throwable ex) {
// Ignore. No java.util.logging bridge is installed.
}
}
其中的SLF4JBridgeHandler
就是jul-to-slf4j
依赖的中实现JUL Over到SLF4J的处理类。
解决方案
根据实际的SLF4J的 实现,选择将JUL 直接Over到对应的实现。下面就根据Log4j2作为实现来处理。
添加jul over log4j2
依赖
xml
<!-- 添加jul over log4j2 -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-jul</artifactId>
<version>${log4j2.version}</version>
</dependency>
移除jul over slf4j
依赖
xml
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jul-to-slf4j</artifactId>
<version>${slf4j.version}</version>
</dependency>
参考资料: