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

Spring Boot中Loki4jAppender类找不到及Logback配置异常排查

问题排查:Spring Boot集成Loki4jAppender的日志配置异常

问题背景

在Spring Boot Java应用中尝试使用Loki4jAppender推送日志到Loki,解决Maven依赖问题后出现CLASS_NOT_FOUND错误,调整logback-spring.xml配置又遇到Logback初始化时元素无适配操作的异常,需要排查原因并给出解决办法。


初始错误信息

root@CSX-:/mnt/c/Automation/oe-platform/cloudcontroller/target# java -jar -Dlogging.config=/mnt/c/Automation/oe-platform/cloudcontroller/src/main/resources/logback-spring.xml swagger-ui-0.0.1-SNAPSHOT.jar 
2025-01-05 21:39:56,047 main ERROR Error processing element appender ([configuration: null]): CLASS_NOT_FOUND
...
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".

POM.xml依赖配置片段

<dependencies>
  <dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
  </dependency>
  <dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-slf4j2-impl</artifactId>
    <version>2.24.3</version>
  </dependency>
</dependencies>
<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>com.github.loki4j</groupId>
      <artifactId>loki-logback-appender</artifactId>
    </dependency>
  </dependencies>
</dependencyManagement>

初始logback-spring.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<configuration> 
   <include resource="org.springframework/boot/logging/logback/base.xml"/>
   <appender name="LOKI" class="com.github.loki4j.logback.Loki4jAppender">
     <logger name="org.springframework.web" level="INFO"/>
        <http>
            <url>http://a6629f018a6da4430852fbfc7db64d91-1818106300.us-east-1.elb.amazonaws.com:32730/loki/api/v1/push</url>
        </http>
        <format>
            <label>
                <pattern>app=${name},host=${HOSTNAME},level=%level</pattern>
                <readMarkers>true</readMarkers>
            </label>
            <message>
                <pattern>
                    {
                    "level":"%level",
                    "class":"%logger{36}",
                    "thread":"%thread",
                    "message": "%message",
                    "requestId": 100
                    }
                </pattern>
            </message>
         </format>
          <root level="INFO">
        <appender-ref ref="LOKI" />
     </root>
     </appender>
</configuration>

更新后的错误信息

00:11:30,692 |-ERROR in ch.qos.logback.core.joran.spi.Interpreter@29:15 - no applicable action for [Loggers], current ElementPath  is [[Configuration][Loggers]]
...
java.lang.IllegalStateException: Logback configuration error detected:

更新后的logback-spring.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<Configuration strict="true"> 
<!--    <include resource="org.springframework/boot/logging/logback/base.xml"/>        -->
   <appender name="LOKI" class="com.github.loki4j.logback.Loki4jAppender">
        <http>
            <url>http://a6629f018a6da4430852fbfc7db64d91-1818106300.us-east-1.elb.amazonaws.com:32730/loki/api/v1/push</url>
        </http>
        <format>
            <label>
                <pattern>app=${name},host=${HOSTNAME},level=%level</pattern>
                <readMarkers>true</readMarkers>
            </label>
            <message>
                <pattern>
                    {
                    "level":"%level",
                    "class":"%logger{36}",
                    "thread":"%thread",
                    "message": "%message",
                    "requestId": 100
                    }
                </pattern>
            </message>
         </format>
     </appender>
     <Loggers>
       <Logger name="org.springframework.web" level="INFO" additivity="false" >
        <AppenderRef ref="LOKI"/>
        </Logger>
        <root level="INFO">
        <appender-ref ref="LOKI" />
     </root>
     </Loggers>
</Configuration >

问题原因分析

1. 初始CLASS_NOT_FOUND错误原因

  • 依赖未实际引入:loki-logback-appender仅在dependencyManagement中声明版本,未在dependencies节点下添加实际依赖,导致运行时找不到LokiAppender类
  • SLF4J绑定冲突:同时引入log4j-slf4j2-impl和SLF4J API,Spring Boot默认用Logback作为日志实现,log4j的绑定会覆盖Logback的SLF4J实现,导致org.slf4j.impl.StaticLoggerBinder加载失败

2. 更新后Logback配置异常原因

Logback的XML配置元素严格区分大小写,配置中使用了大写的<Loggers>、<Logger>、<AppenderRef>,但Logback要求的是小写的<loggers>、<logger>、<appender-ref>,解析时无法识别这些元素,因此抛出"no applicable action"错误


解决建议

步骤1:修正Maven依赖配置

  • 将loki-logback-appender移到dependencies节点下并指定稳定版本(如1.6.0)
  • 移除log4j-slf4j2-impl依赖,避免和Logback的SLF4J绑定冲突,Spring Boot会自动引入Logback的SLF4J实现(logback-classic)

修正后的POM.xml片段:

<dependencies>
  <!-- SLF4J API由Spring Boot自动引入,可省略显式声明 -->
  <dependency>
    <groupId>com.github.loki4j</groupId>
    <artifactId>loki-logback-appender</artifactId>
    <version>1.6.0</version>
  </dependency>
</dependencies>
<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>com.github.loki4j</groupId>
      <artifactId>loki-logback-appender</artifactId>
      <version>1.6.0</version>
    </dependency>
  </dependencies>
</dependencyManagement>

步骤2:修正Logback配置文件

  • 将所有大写的配置元素改为小写,符合Logback规范
  • 恢复Spring Boot默认日志配置的引入(可选,保留控制台等基础日志输出)
  • 移除初始配置中错误嵌套在<appender>内的<logger>和<root>元素,确保结构正确

修正后的logback-spring.xml:

<?xml version="1.0" encoding="UTF-8"?>
<configuration strict="true"> 
   <include resource="org.springframework/boot/logging/logback/base.xml"/>
   <appender name="LOKI" class="com.github.loki4j.logback.Loki4jAppender">
        <http>
            <url>http://a6629f018a6da4430852fbfc7db64d91-1818106300.us-east-1.elb.amazonaws.com:32730/loki/api/v1/push</url>
        </http>
        <format>
            <label>
                <pattern>app=${name},host=${HOSTNAME},level=%level</pattern>
                <readMarkers>true</readMarkers>
            </label>
            <message>
                <pattern>
                    {
                    "level":"%level",
                    "class":"%logger{36}",
                    "thread":"%thread",
                    "message": "%message",
                    "requestId": 100
                    }
                </pattern>
            </message>
         </format>
     </appender>
     <loggers>
       <logger name="org.springframework.web" level="INFO" additivity="false" >
        <appender-ref ref="LOKI"/>
        </logger>
        <root level="INFO">
        <appender-ref ref="LOKI" />
     </root>
     </loggers>
</configuration>

步骤3:验证配置

  • 执行mvn clean package重新构建项目
  • 启动应用时无需指定-Dlogging.config,Spring Boot会自动加载classpath下的logback-spring.xml
  • 检查日志是否正常推送到Loki,同时确认控制台无初始化错误

内容的提问来源于stack exchange,提问作者user2315104

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 03:27:03