IntelliJ下Gradle项目log4j.properties不生效无法输出DEBUG日志
DEBUG日志无法输出的核心原因基本都是SLF4J实际绑定的日志实现和你预期的Log4j1不匹配,或是log4j.properties没有被加载到运行时classpath,按以下步骤逐一排查修复即可:
排查修复步骤
1. 确认SLF4J的实际绑定对象
启动项目时SLF4J会默认在控制台输出绑定日志,找前缀为SLF4J:的输出行,重点看Actual binding is of type后的内容:
- 显示
org.slf4j.impl.Log4jLoggerFactory:已正确绑定Log4j1,直接走后续资源目录检查步骤 - 显示
ch.qos.logback.classic.util.ContextSelectorStaticBinder:实际绑定的是Logback,你编写的log4j.properties完全不会被读取 - 显示
org.apache.logging.slf4j.Log4jLoggerFactory:实际绑定的是Log4j2,当前使用的Log4j1格式配置文件无效 - 出现
Class path contains multiple SLF4J bindings提示:classpath下存在多个日志实现冲突,SLF4J会随机选一个绑定,大概率没有选中Log4j1
2. 修正Gradle依赖配置
普通Java Gradle项目(非SpringBoot)
必须引入SLF4J到Log4j1的适配绑定包,同时排除其他冲突的日志实现,打开build.gradle调整dependencies配置:
dependencies { // SLF4J核心依赖 implementation 'org.slf4j:slf4j-api:1.7.36' // SLF4J到Log4j1的绑定适配包,会传递引入Log4j1本身 implementation 'org.slf4j:slf4j-log4j12:1.7.36' // 全局排除所有冲突的SLF4J绑定实现 configurations.all { exclude group: 'ch.qos.logback', module: 'logback-classic' exclude group: 'org.apache.logging.log4j', module: 'log4j-slf4j-impl' exclude group: 'org.slf4j', module: 'slf4j-simple' exclude group: 'org.slf4j', module: 'slf4j-jdk14' exclude group: 'org.slf4j', module: 'slf4j-nop' } }
改完后点击IDEA右侧Gradle面板的刷新按钮同步依赖。
SpringBoot项目
SpringBoot默认使用Logback作为日志实现,自定义的log4j.properties不会生效,二选一处理即可:
- 方案一(无特殊日志需求推荐):删除自己创建的log4j.properties,直接在项目配置文件里设置日志级别,比如
application.yml配置:logging: level: root: debug - 方案二(必须使用Log4j1):排除SpringBoot默认的日志starter,引入Log4j1依赖:
configurations.all { exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging' } dependencies { implementation 'org.springframework.boot:spring-boot-starter-log4j' }
3. 确认配置文件被加载到classpath
依赖配置正确后仍无法输出的,检查资源目录配置:
- 在IDEA左侧项目树找到
src/main/resources目录,右键 -> Mark Directory as -> 选择Resources Root,目录图标会变成带资源标记的样式 - 执行Gradle的
clean任务清空编译产物,再执行build任务重新构建,打开build/resources/main目录,确认目录下存在log4j.properties文件 - 如果文件不存在,说明资源路径配置有误,调整后重新编译即可
4. 验证
重新启动项目,控制台会先输出SLF4J绑定Log4j1的提示,此时log.debug()的调用就会按照你配置的格式正常输出DEBUG级别日志。
内容的提问来源于stack exchange,提问作者Kurtiss
相关产品推荐
相关产品推荐

