如何使用logback记录org.springframework.web.context.ContextLoader日志
问题根因
你遇到的log4j警告说明项目中Spring的日志请求仍在通过log4j API输出,你配置的logback完全没有接管这部分日志请求,按以下步骤排查即可:
1. 修复依赖冲突,统一日志门面
这是最核心的问题,你需要将项目中所有日志API的调用全部桥接到SLF4J,再由SLF4J绑定到logback实现,避免多套日志实现共存:
- 排除Spring自带的commons-logging依赖,以及所有log4j相关的实现依赖
- 新增桥接包
jcl-over-slf4j(接管commons-logging调用)、log4j-over-slf4j(接管log4j调用)
Maven配置示例:
<dependencies> <!-- 排除Spring原生commons-logging --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>你的Spring版本</version> <exclusions> <exclusion> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> </exclusion> </exclusions> </dependency> <!-- 引入SLF4J桥接包 --> <dependency> <groupId>org.slf4j</groupId> <artifactId>jcl-over-slf4j</artifactId> <version>1.7.36</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>log4j-over-slf4j</artifactId> <version>1.7.36</version> </dependency> <!-- 确认已引入logback核心依赖 --> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.2.11</version> </dependency> </dependencies>
可以通过mvn dependency:tree(Maven)或gradlew dependencies(Gradle)命令检查项目中是否还存在未排除的log4j、commons-logging实现依赖。
2. 修正logback.xml中的logger配置
logback的logger包匹配不需要加通配符后缀,你当前写的org.springframework.web.context.*无法正确匹配目标类,修改为:
<logger name="org.springframework.web.context" level="INFO" additivity="false"> <appender-ref ref="STDOUT"/> <!-- 如果需要同时输出到文件等其他appender,也可以在这里补充 --> </logger>
3. 确认logback配置加载正常
- 非SpringBoot项目:确保
logback.xml放在src/main/resources根目录下,或启动时通过JVM参数指定配置路径:-Dlogback.configurationFile=你的logback.xml绝对路径 - SpringBoot项目:确认未引入
spring-boot-starter-log4j2等其他日志实现依赖,默认spring-boot-starter-logging已经内置logback绑定,无需额外配置
完成以上步骤后重启项目,ContextLoader的日志就会正常输出到logback配置的对应appender中,log4j的警告也会消失。
内容的提问来源于stack exchange,提问作者Petr Kostroun
相关产品推荐
相关产品推荐

