Spring Boot部署Spinnaker后SLF4J无提供者日志异常求助
问题:Spinnaker部署后SLF4J无提供者且业务日志丢失
环境与现象
使用Spring Boot 2.3.1.RELEASE + Java 11,本地环境日志输出正常,但部署到Spinnaker后仅能看到SLF4J错误提示及Tomcat启动日志,业务日志完全缺失。
部署后日志信息
SLF4J: No SLF4J providers were found. SLF4J: Defaulting to no-operation (NOP) logger implementation SLF4J: See https://www.slf4j.org/codes.html#noProviders for further details. SLF4J: Class path contains SLF4J bindings targeting slf4j-api versions 1.7.x or earlier. SLF4J: Ignoring binding found at [jar:file:/Users/name/.m2/repository/ch/qos/logback/logback-classic/1.2.7/logback-classic-1.2.7.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: See https://www.slf4j.org/codes.html#ignoredBindings for an explanation. . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v2.3.1.RELEASE) Oct 29, 2023 10:04:12 PM org.apache.catalina.core.StandardService startInternal INFO: Starting service [Tomcat] Oct 29, 2023 10:04:12 PM org.apache.catalina.core.StandardEngine startInternal INFO: Starting Servlet engine: [Apache Tomcat/9.0.36] Oct 29, 2023 10:04:12 PM org.apache.catalina.core.ApplicationContext log INFO: Initializing Spring embedded WebApplicationContext
项目依赖配置
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> <version>${spring.boot.version}</version> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <version>${spring.boot.version}</version> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.22</version> <scope>provided</scope> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.2.7</version> </dependency>
解决SLF4J无提供者错误的方法
1. 修复依赖配置,复用Spring Boot日志 starter
Spring Boot的spring-boot-starter-logging已默认包含适配版本的SLF4J API和Logback,手动排除该starter并单独引入Logback极易引发版本冲突。修改依赖如下:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> <version>${spring.boot.version}</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <version>${spring.boot.version}</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.22</version> <scope>provided</scope> </dependency> <!-- 无需手动引入logback-classic,spring-boot-starter-logging已包含 -->
若需自定义Logback版本,在pom.xml的properties节点中配置:
<properties> <logback.version>1.2.7</logback.version> </properties>
2. 排查并解决SLF4J版本冲突
执行mvn dependency:tree查看依赖树,确认是否有第三方依赖引入了SLF4J API 2.x版本(SLF4J 2.x改用ServiceLoader加载提供者,与1.7.x的StaticLoggerBinder机制不兼容)。若发现高版本SLF4J API,通过排除依赖统一到1.7.x:
<dependency> <!-- 存在冲突的第三方依赖 --> <groupId>xxx</groupId> <artifactId>xxx</artifactId> <exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> </exclusion> </exclusions> </dependency>
Spinnaker部署场景排查思路
- 检查部署包内容:解压部署到Spinnaker的JAR包,确认
BOOT-INF/lib下包含slf4j-api-1.7.x.jar和logback-classic-1.2.7.jar,同时验证BOOT-INF/classes下存在Logback配置文件(如logback-spring.xml)。 - 验证容器classpath:检查Spinnaker部署的容器环境,是否有额外的日志JAR包被挂载或加入classpath,导致SLF4J加载逻辑冲突。
- 核对CI/CD流程:确认Spinnaker的构建流水线中是否有修改依赖、移除日志相关JAR的操作,比如打包脚本是否误删了Logback依赖。
- 检查JVM启动参数:确认部署时是否设置了影响SLF4J的系统参数,比如
org.slf4j.provider或其他日志相关参数,导致Logback未被正确初始化。 - 查看Spinnaker部署日志:检查Spinnaker在部署过程中的日志输出,是否存在依赖缺失、权限不足(无法读取配置文件)等异常信息。
内容的提问来源于stack exchange,提问作者Pier Zegarra Reymundo
相关产品推荐
相关产品推荐

