【问题标题】:Spring Boot with log4j2 not working when change default properties file name更改默认属性文件名时,带有 log4j2 的 Spring Boot 不起作用
【发布时间】: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=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%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>
  ...

【问题讨论】:

    标签: spring-boot properties log4j2


    【解决方案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 中。

      【讨论】:

        猜你喜欢
        • 2015-04-05
        • 2016-08-01
        • 2019-05-19
        • 2022-07-29
        • 2013-04-01
        • 1970-01-01
        • 2014-03-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多