You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 15:49:59