Java Maven项目Logback配置异常:SLF4J无提供者且绑定被忽略
问题解决:SLF4J无提供者且忽略StaticLoggerBinder绑定
核心问题分析
你遇到的两个错误根源是SLF4J版本与Logback版本不兼容:
- SLF4J 2.x(你用的是2.0.4)采用了新的服务提供者接口(SPI)机制,不再依赖旧版的
StaticLoggerBinder类 - 你引入的
logback-classic:1.2.3是适配SLF4J 1.7.x的版本,无法被SLF4J 2.x识别,因此被忽略,导致找不到可用的日志提供者
另外还有几个次要问题会影响日志功能正常运行:
- Logback组件版本不一致:
logback-core:1.3.2和logback-classic:1.2.3版本不匹配 - logback.xml中类名大小写错误:
consoleAppender应该是ConsoleAppender - 主类包名大小写不匹配:pom.xml中配置的
mainClass是org.Project.AppMain,但实际主类是org.project.AppMain
修复步骤
1. 统一Logback版本并适配SLF4J 2.x
将logback-classic版本升级到1.3.x,该版本原生支持SLF4J 2.x的SPI机制,同时保持logback-core和logback-classic版本一致。修改pom.xml中的依赖:
<dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>2.0.4</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-core</artifactId> <version>1.3.8</version> <!-- 和logback-classic版本一致 --> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.3.8</version> <!-- 适配SLF4J 2.x的版本 --> </dependency>
2. 修正logback.xml中的类名错误
将consoleAppender改为大写开头的ConsoleAppender:
<?xml version="1.0" encoding="UTF-8"?> <configuration> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <layout class="ch.qos.logback.classic.PatternLayout"> <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> </layout> </appender> <root level="info"> <appender-ref ref="STDOUT" /> </root> </configuration>
3. 修正主类包名大小写
将pom.xml中mainClass的配置改为和实际主类一致的小写包名:
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> <mainClass>org.project.AppMain</mainClass> </transformer>
4. 处理Maven Shade插件的SPI文件合并
如果你使用shade插件打包,需要添加ServicesResourceTransformer来合并SLF4J的服务配置文件,避免打包后丢失提供者信息:
<configuration> <transformers> <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> <mainClass>org.project.AppMain</mainClass> </transformer> <!-- 添加这个Transformer合并SPI配置 --> <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/> </transformers> </configuration>
5. 清理并重新构建项目
执行以下Maven命令清理旧的依赖和构建产物,重新打包:
mvn clean package
验证修复
运行打包后的Jar文件,日志应该正常输出,不再出现SLF4J的错误提示。如果需要输出debug级别的日志,记得把logback.xml中的<root level="info">改为<root level="debug">。
内容的提问来源于stack exchange,提问作者efoc
相关产品推荐
相关产品推荐

