SpringBoot:如何从库中更新Logback文件模式(自定义的spring boot starter)

tzdcorbm  于 2022-11-05  发布在  Spring
关注(0)|答案(1)|浏览(189)

我想将TraceId添加到所有日志行。我可以通过以下方式轻松完成此操作:
1.将跟踪ID添加到MDC

MDC.put("TRACE_ID", sessionAware.getTraceId()+": ");

1.更新我的www.example.com中的文件模式application.properties(通过添加:“%X{追踪识别码}”):

logging.pattern.file=-%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}} ${LOG_LEVEL_PATTERN:-%5p} ${PID:- } --- [%t] %-40.40logger{39} : %X{TRACE_ID}%m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}

但是我想让我的CustomSpringBootStarter设置文件模式。但是当我从我的CustomSpringBootStarter中更新属性“logging.pattern.file”时,它没有生效。有人知道这个问题的解决方案吗?
我曾尝试在CustomSpringBootStarter的www.example.com中设置“logging.pattern.file”属性application.properties,但它不起作用。

n3schb8v

n3schb8v1#

我找到了一个解决问题的方法,很大程度上受到了this question的启发。
我在我的CustomSpringBootStarter中创建了以下环境后处理器:

public class LifeLogBackConfiguration implements EnvironmentPostProcessor {
@Override
public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) {
    Map<String, String> properties = Collections.unmodifiableMap(Map.of(
            "logging.pattern.file", LogConstants.FILE_LOG_PATTERN_LIFE,
            "logging.pattern.console", LogConstants.CONSOLE_LOG_PATTERN_LIFE));

    PropertySource propertySource = new OriginTrackedMapPropertySource("LogPatternsLife", properties, true);
    environment.getPropertySources().addLast(propertySource);
}

}
,并将其注册在:资源/元信息/spring.factories

org.springframework.boot.env.EnvironmentPostProcessor=dk.topdanmark.life.lifespringbootstarter.log.LifeLogBackConfiguration

这对我来说解决了问题。

相关问题