更改默认属性文件名时,带有 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-webspring-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 设置动画

带有路由附加程序的 Log4J2 不归档文件

并非每个日志都使用 LOG4j2 属性文件在日志文件中打印

日志记录:在 Spring Boot 中使用属性文件实现 Log4j2

JavaFX CSS 在运行时更改自定义样式类的属性

Log4j2 每日日志文件