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
相关产品推荐
相关产品推荐

