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

Spring Boot在Linux虚拟机启动遇Logback配置错误,Windows虚拟机正常

Spring Boot应用Linux环境启动Logback配置错误解决方案

问题概述

部署在Azure App Service上的Spring Boot应用,在Windows虚拟机中可正常启动,但在Linux虚拟机启动时触发Logback配置错误,核心报错:

Caused by: java.lang.IllegalStateException: Logback configuration error detected: 
ERROR in c******@3:104 - no applicable action for [springProperty], current ElementPath  is [[configuration][springProperty]]

同时<springProfile>等Spring扩展标签也无法被识别。

依赖版本

  • org.springframework.boot:spring-boot:2.3.7.RELEASE
  • ch.qos.logback:logback-core:1.2.3

关键配置文件

logback.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <springProperty scope="context" name="instrumentationKey" source="appinsights.instrumentationkey"/>
    <statusListener class="ch.qos.logback.core.status.NopStatusListener"/>

    <springProfile name="logging-azure">
        <appender name="aiAppender" class="com.microsoft.applicationinsights.logback.ApplicationInsightsAppender">
            <instrumentationKey>${instrumentationKey}</instrumentationKey>
            <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
                <level>INFO</level>
            </filter>
        </appender>
    </springProfile>

    <!-- Initial Parent Folder -->
    <variable name="logfilePath" value="br-proposition-logs"/>

    <include resource="standard-logback-config.xml"/>

    <springProfile name="logging-local">
        <root level="ERROR">
            <appender-ref ref="STDOUT"/>
            <appender-ref ref="LOG-FILE"/>
        </root>
    </springProfile>

    <springProfile name="logging-azure">
        <root level="ERROR">
            <appender-ref ref="aiAppender"/>
            <appender-ref ref="LOG-FILE"/>
        </root>
    </springProfile>
</configuration>

standard-logback-config.xml

<?xml version="1.0" encoding="UTF-8" ?>

<included>

    <variable name="fileName" value="br-proposition"/>

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%X{proposition.requestId}] %-5level %logger %marker  %msg%n</pattern>
        </encoder>
    </appender>

    <appender name="LOG-FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${logfilePath}/${fileName}.log</file>
        <rollingPolicy class="com.lv.gi.traps.common.logging.TrapsSizeAndTimeBasedRollingPolicy">
            <FileNamePattern>${logfilePath}/%d{yyyy-MM-dd,aux}/${fileName}.%d{yyyy-MM-dd}-%i.log</FileNamePattern>
            <maxFileSize>20MB</maxFileSize>
            <maxHistory>7</maxHistory>
            <totalSizeCap>1GB</totalSizeCap>
            <cleanHistoryOnStart>true</cleanHistoryOnStart>
        </rollingPolicy>
        <encoder>
            <pattern>%d [${HOSTNAME}:%X{proposition.requestId}] %-5level %logger %marker  %msg%n</pattern>
        </encoder>
    </appender>

</included>

完整错误堆栈

Exception in thread "main" java.lang.reflect.InvocationTargetException
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:49)
at org.springframework.boot.loader.Launcher.launch(Launcher.java:107)
at org.springframework.boot.loader.Launcher.launch(Launcher.java:58)
at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:88)
Caused by: java.lang.IllegalStateException: Logback configuration error detected:
ERROR in c****@3:104 - no applicable action for [springProperty], current ElementPath  is [[configuration][springProperty]]
ERROR in c******@6:41 - no applicable action for [springProfile], current ElementPath  is [[configuration][springProfile]]
ERROR in c******@7:115 - no applicable action for [appender], current ElementPath  is [[configuration][springProfile][appender]]
ERROR in c******@8:33 - no applicable action for [instrumentationKey], current ElementPath  is [[configuration][springProfile][appender][instrumentationKey]]
ERROR in c******@9:75 - no applicable action for [filter], current ElementPath  is [[configuration][springProfile][appender][filter]]
ERROR in c******@10:24 - no applicable action for [level], current ElementPath  is [[configuration][springProfile][appender][filter][level]]
ERROR in c******@20:41 - no applicable action for [springProfile], current ElementPath  is [[configuration][springProfile]]
ERROR in c******@21:29 - no applicable action for [root], current ElementPath  is [[configuration][springProfile][root]]
ERROR in c******@22:41 - no applicable action for [appender-ref], current ElementPath  is [[configuration][springProfile][root][appender-ref]]
ERROR in c******@23:43 - no applicable action for [appender-ref], current ElementPath  is [[configuration][springProfile][root][appender-ref]]
ERROR in c******@27:41 - no applicable action for [springProfile], current ElementPath  is [[configuration][springProfile]]
ERROR in c******@28:29 - no applicable action for [root], current ElementPath  is [[configuration][springProfile][root]]
ERROR in c******@29:45 - no applicable action for [appender-ref], current ElementPath  is [[configuration][springProfile][root][appender-ref]]
ERROR in c******@30:43 - no applicable action for [appender-ref], current ElementPath  is [[configuration][springProfile][root][appender-ref]]
at org.springframework.boot.logging.logback.LogbackLoggingSystem.loadConfiguration(LogbackLoggingSystem.java:169)
at org.springframework.boot.logging.AbstractLoggingSystem.initializeWithConventions(AbstractLoggingSystem.java:80)
at org.springframework.boot.logging.AbstractLoggingSystem.initialize(AbstractLoggingSystem.java:60)
at org.springframework.boot.logging.logback.LogbackLoggingSystem.initialize(LogbackLoggingSystem.java:118)
at org.springframework.boot.context.logging.LoggingApplicationListener.initializeSystem(LoggingApplicationListener.java:306)
at org.springframework.boot.context.logging.LoggingApplicationListener.initialize(LoggingApplicationListener.java:281)
at org.springframework.boot.context.logging.LoggingApplicationListener.onApplicationEnvironmentPreparedEvent(LoggingApplicationListener.java:239)
at org.springframework.boot.context.logging.LoggingApplicationListener.onApplicationEvent(LoggingApplicationListener.java:216)
at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:172)
at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:165)
at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:139)
at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:127)
at org.springframework.boot.context.event.EventPublishingRunListener.environmentPrepared(EventPublishingRunListener.java:80)
at org.springframework.boot.SpringApplicationRunListeners.environmentPrepared(SpringApplicationRunListeners.java:53)
at org.springframework.boot.SpringApplication.prepareEnvironment(SpringApplication.java:345)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:308)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1237)
at com.lv.gi.propositionengine.PropositionEngineInitializer.initialise(PropositionEngineInitializer.java:20)
at com.lv.gi.br.propositionengine.AppPropositionEngineApplication.main(AppPropositionEngineApplication.java:28)
... 8 more

解决方案

1. 确认依赖完整性

<springProperty>和<springProfile>是Spring Boot提供的Logback扩展,需确保spring-boot-starter-logging依赖被正确引入。若项目未直接声明,检查是否通过spring-boot-starter间接引入。

Maven显式添加依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-logging</artifactId>
    <version>2.3.7.RELEASE</version>
</dependency>

Gradle显式添加依赖:

implementation 'org.springframework.boot:spring-boot-starter-logging:2.3.7.RELEASE'

2. 检查类加载顺序

Linux环境下若存在自定义类加载逻辑或容器类加载优先级问题,可能导致Spring的Logback扩展类无法加载:

  • 确保打包为可执行Jar,Spring Boot的JarLauncher会正确处理类加载
  • 检查Azure App Service的Linux配置,是否有自定义JVM参数或类路径配置干扰类加载

3. 替换Logback扩展标签(临时方案)

若暂时无法解决依赖或类加载问题,可用Logback原生方式替代Spring扩展:

  • 用Logback的<property>标签配合系统变量替代<springProperty>,启动时传入-Dappinsights.instrumentationkey=xxx
  • 用Logback的<if>标签(需引入logback-ext-core依赖)替代<springProfile>

4. 验证打包内容

解压可执行Jar,检查BOOT-INF/lib下是否包含spring-boot-logging-2.3.7.RELEASE.jar和spring-boot-autoconfigure-2.3.7.RELEASE.jar,这两个Jar包含Logback扩展的实现类。

下一步建议

  • 按计划配置Azure远程调试,查看类加载情况
  • 搭建本地Linux虚拟机复现问题,快速验证依赖调整后的效果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 21:54:25