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

Spring Boot Native环境中Logback logging.config属性无法被环境变量覆盖

问题:Spring Boot Native环境下环境变量无法覆盖logging.config配置

环境与代码示例

1. Gradle构建配置

plugins {
    java
    id("org.springframework.boot") version "3.1.5"
    id("io.spring.dependency-management") version "1.1.3"
    id("org.graalvm.buildtools.native") version "0.9.27"
}

group = "com.example"
version = "0.0.7"

java {
    sourceCompatibility = JavaVersion.VERSION_17
}

repositories {
    mavenCentral()
}

dependencies {
    implementation("org.springframework.boot:spring-boot-starter")
}

tasks {
    bootBuildImage {
        builder.set("paketobuildpacks/builder-jammy-tiny:latest")
    }
}

2. application.properties配置

logging.config=classpath:logback-aaa.xml

3. 主程序Java代码

package com.example.springlogbacknative;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class SpringLogbackNativeApplication {
    public static Logger log = LoggerFactory.getLogger(SpringLogbackNativeApplication.class);

    public static void main(String[] args) {
        System.out.println("System.getenv(\"LOGGING_CONFIG\") = " + System.getenv("LOGGING_CONFIG"));
        System.out.println("System.getenv(\"logging.config\") = " + System.getenv("logging.config"));

        SpringApplication.run(SpringLogbackNativeApplication.class, args);
    }
}

4. Docker Compose运行配置

services:
  sln:
    image: spring-logback-native:0.0.7
    environment:
      LOGGING_CONFIG: "classpath:logback-replace.xml"
      logging.config: "classpath:logback-replace.xml"

运行现象与问题

执行./gradlew bootBuildImage构建Native镜像后,通过Docker Compose启动应用,日志输出显示环境变量已被正确读取,但日志系统仍使用logback-aaa.xml的配置:

System.getenv("LOGGING_CONFIG") = classpath:logback-replace.xml
System.getenv("logging.config") = classpath:logback-replace.xml
14:21:46,499 |-INFO in ch.qos.logback.classic.LoggerContext[default] - This is logback-classic version 1.4.11
14:21:46,500 |-INFO in ch.qos.logback.classic.util.ContextInitializer@132da9ab - Here is a list of configurators discovered as a service, by rank: 
14:21:46,500 |-INFO in ch.qos.logback.classic.util.ContextInitializer@132da9ab -   org.springframework.boot.logging.logback.RootLogLevelConfigurator
14:21:46,500 |-INFO in ch.qos.logback.classic.util.ContextInitializer@132da9ab - They will be invoked in order until ExecutionStatus.DO_NOT_INVOKE_NEXT_IF_ANY is returned.
14:21:46,500 |-INFO in ch.qos.logback.classic.util.ContextInitializer@132da9ab - Constructed configurator of type class org.springframework.boot.logging.logback.RootLogLevelConfigurator
14:21:46,500 |-INFO in ch.qos.logback.classic.util.ContextInitializer@132da9ab - org.springframework.boot.logging.logback.RootLogLevelConfigurator.configure() call lasted 0 milliseconds. ExecutionStatus=INVOKE_NEXT_IF_ANY
14:21:46,500 |-INFO in ch.qos.logback.classic.util.ContextInitializer@132da9ab - Trying to configure with ch.qos.logback.classic.joran.SerializedModelConfigurator
14:21:46,500 |-INFO in ch.qos.logback.classic.util.ContextInitializer@132da9ab - Instantiation failure: java.lang.ClassNotFoundException: ch.qos.logback.classic.joran.SerializedModelConfigurator
14:21:46,500 |-INFO in ch.qos.logback.classic.util.ContextInitializer@132da9ab - Trying to configure with ch.qos.logback.classic.util.DefaultJoranConfigurator
14:21:46,500 |-INFO in ch.qos.logback.classic.util.ContextInitializer@132da9ab - Instantiation failure: java.lang.ClassNotFoundException: ch.qos.logback.classic.util.DefaultJoranConfigurator
14:21:46,500 |-INFO in ch.qos.logback.classic.util.ContextInitializer@132da9ab - Trying to configure with ch.qos.logback.classic.BasicConfigurator
14:21:46,500 |-INFO in ch.qos.logback.classic.util.ContextInitializer@132da9ab - Instantiation failure: java.lang.ClassNotFoundException: ch.qos.logback.classic.BasicConfigurator
14:21:46,531 |-INFO in ch.qos.logback.core.model.processor.AppenderModelHandler - Processing appender named [console_aaa]
14:21:46,531 |-INFO in ch.qos.logback.core.model.processor.AppenderModelHandler - About to instantiate appender of type [ch.qos.logback.core.ConsoleAppender]
14:21:46,532 |-INFO in ch.qos.logback.core.model.processor.ImplicitModelHandler - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property
14:21:46,532 |-INFO in ch.qos.logback.classic.model.processor.RootLoggerModelHandler - Setting level of ROOT logger to INFO
14:21:46,532 |-INFO in ch.qos.logback.classic.jul.LevelChangePropagator@ba501d9 - Propagating INFO level on Logger[ROOT] onto the JUL framework
14:21:46,532 |-INFO in ch.qos.logback.core.model.processor.AppenderRefModelHandler - Attaching appender named [console_aaa] to Logger[ROOT]
14:21:46,532 |-INFO in ch.qos.logback.core.model.processor.DefaultProcessor@5e495062 - End of configuration.

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::                (v3.1.5)

14:21:46.534 AAA INFO  c.e.s.SpringLogbackNativeApplication - Starting AOT-processed SpringLogbackNativeApplication using Java 17.0.8.1 with PID 1 (/workspace/com.example.springlogbacknative.SpringLogbackNativeApplication started by cnb in /workspace)
14:21:46.534 AAA INFO  c.e.s.SpringLogbackNativeApplication - No active profile set, falling back to 1 default profile: "default"
14:21:46.542 AAA INFO  c.e.s.SpringLogbackNativeApplication - Started SpringLogbackNativeApplication in 0.033 seconds (process running for 0.046)

预期Docker Compose中设置的LOGGING_CONFIG环境变量能够覆盖application.properties里的logging.config配置,但实际未生效。排查发现,在org.springframework.boot.context.logging.LoggingApplicationListener.initializeSystem方法中,environment.getProperty(CONFIG_PROPERTY)并未返回环境变量设置的路径,而该逻辑在非Native环境下工作正常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 13:45:53