根据 log4j2 文档:
Spring Boot Lookup 从以下位置检索 Spring 属性的值
弹簧配置。此查找将返回空值,直到
Spring Boot 初始化应用程序日志记录。
<File name="Application" fileName="application.log">
<PatternLayout>
<pattern>%d %p %c{1.} [%t] $${spring:spring.application.name} %m%n</pattern>
</PatternLayout>
</File>
此查找需要 log4j-spring-cloud-config-client 包含在
应用程序。
配置此类查找的正确方法是什么?
我尝试组装以下应用程序:
构建.gradle
plugins {
id 'org.springframework.boot' version '2.2.5.RELEASE'
id 'io.spring.dependency-management' version '1.0.9.RELEASE'
id 'java'
}
sourceCompatibility = '13'
repositories{
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter'
implementation 'org.springframework.boot:spring-boot-starter-log4j2'
}
configurations {
all {
exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging'
exclude group: "ch.qos.logback", module: "logback-classic"
}
}
main
@SpringBootApplication
public class DemoApplication implements ApplicationRunner {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
private final Logger logger = LogManager.getLogger();
@Override
public void run(ApplicationArguments args) throws Exception {
logger.debug("Debugging log");
logger.info("Info log");
logger.warn("Hey, This is a warning!");
logger.error("Oops! We have an Error. OK");
logger.fatal("Damn! Fatal error. Please fix me.");
}
}
应用程序.yml
spring.application.name: Demo
log4j-spring.xml
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN" monitorInterval="30">
<Appenders>
<Console name="ConsoleAppender" target="SYSTEM_OUT" follow="true">
<PatternLayout>
<pattern>%d %p %c{1.} [%t] $${spring:spring.application.name} %m%n</pattern>
</PatternLayout>
</Console>
</Appenders>
<Loggers>
<Root level="info">
<AppenderRef ref="ConsoleAppender" />
</Root>
</Loggers>
</Configuration>
我希望解析器能够正确替换“Demo”作为应用程序名称,但这并没有发生。
spring-boot-starter-log4j2 是否缺少一些依赖项才能开箱即用?
Edit这是最简单的情况。
实际上,我想将应用程序名称传递给 gelf Graylog 附加程序。
我想在多个组件中共享相同的日志配置。因此,解决方法,例如定义 log4j 属性,或使用 spring 日志记录配置,
不适合。