更改默认属性文件名时,带有 log4j2 的 Spring Boot 不起作用
Posted
技术标签:
【中文标题】更改默认属性文件名时,带有 log4j2 的 Spring Boot 不起作用【英文标题】:Spring Boot with log4j2 not working when change default properties file name 【发布时间】:2020-05-22 05:47:53 【问题描述】:我有 Spring Boot 应用程序,我想使用 log4j2 而不是 logback。我已经完成了从 spring-boot-starter-web 中排除 spring-boot-starter-logging 的所有必要步骤,并添加了 spring-boot-starter-log4j2 依赖项。 当我在资源文件夹下添加 log4j2.properties 文件时,它工作正常,我可以看到日志。 但是当我将文件名更改为 log4j2-demo.properties 并设置 logging.config=classpath:log4j2-demo.properties 时,控制台不会打印任何内容。出于测试目的,我在 logging.config 中为 lo4gj2 文件设置了不同的名称,它给出了找不到文件的错误,我认为 logging.config 属性实际上正在工作并读取我的属性文件。
application.properties 文件:
spring.profiles.active=dev
application-dev.properties 文件:
logging.config=classpath:log4j2-demo.properties
log4j2 属性文件:
status=debug
name=PropertiesConfig
#
filters=threshold
#
filter.threshold.type=ThresholdFilter
filter.threshold.level=debug
#
appenders=console
#
appender.console.type=Console
appender.console.name=STDOUT
appender.console.layout.type=PatternLayout
appender.console.layout.pattern=%dyyyy-MM-dd HH:mm:ss %-5p %c1:%L - %m%n
#
rootLogger.level=info
rootLogger.appenderRefs=stdout
rootLogger.appenderRef.stdout.ref=STDOUT
我的应用结构:
src
main
java
resources
application.properties
application-dev.properties
log4j2-demo.properties
pom.xml:
...
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.graylog2.log4j2</groupId>
<artifactId>log4j2-gelf</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/org.zalando/logbook-spring-boot-starter -->
<dependency>
<groupId>org.zalando</groupId>
<artifactId>logbook-spring-boot-starter</artifactId>
<version>2.0.0</version>
</dependency>
...
【问题讨论】:
【参考方案1】:我不确定这个答案是否适用于这个问题,但就我而言,我将资源添加到我的 pom.xml
的构建配置中,例如
...
<build>
...
<resources>
<resource>
<directory>$basedir/src/main/resources</directory>
<filtering>true</filtering>
<includes>
<include>**/*.xml</include> <!-- or **/*.properties -->
</includes>
</resource>
</resources>
...
</build>
...
当然,我从spring-boot-starter-web
和spring-boot-starter-actuator
中排除了spring-boot-starter-logging
...
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
...
虽然,我使用了默认的log4j2文件名log4j2.xml
并且不需要application.yml
上的步骤配置,我的意思是这个配置logging.config=classpath:log4j2-demo.properties
【讨论】:
【参考方案2】:如果您使用 log4j 2.13.0,您可以使用配置文件在 spring 配置中定义 log4j 2 系统属性。所以你可以:
application-dev.properties
log4j2.configurationFile=log4j2-demo.properties.
Log4j 2.13.0 还支持将 log4j 2 配置文件放在 Spring Cloud Config 中。
【讨论】:
以上是关于更改默认属性文件名时,带有 log4j2 的 Spring Boot 不起作用的主要内容,如果未能解决你的问题,请参考以下文章
属性 Visibility 更改时为 StackPanel 设置动画