spring-boot application.properties 文件可以与 log4j2.xml 配置一起工作吗?

Posted

技术标签:

【中文标题】spring-boot application.properties 文件可以与 log4j2.xml 配置一起工作吗?【英文标题】:Can spring-boot application.properties file woking with log4j2.xml configuration? 【发布时间】:2019-08-05 18:23:24 【问题描述】:

我想在 application.properties 中定义高级文件日志记录,以便利用我的 log4j2.xml 文件配置。我的 log4j2 配置本身工作正常,但是我希望控制来自 application.properties 文件的日志记录级别和日志文件和路径信息。我在应用程序的 pom 文件中有 spring-boot-starter-log4j2 依赖项。

在 log4j2.xml 我有一个属性

<Property name="LOG_FILE">$LOG-DIR/test.log</Property>

,其中 LOG-DIR 在同一文件的另一个(先前)属性中定义。在我的 application.properties 文件中,我有

logging.file=LOG_FILE 

作为一个属性,加上几个级别的属性如

logging.level.org.springframework.web=DEBUG

在我的 application.properties 文件中定义的这些与日志相关的属性都没有用于构建相应的日志文件。同样,当我简单地单独使用 log4j2.xml 时,它可以正常工作,但我想利用 application.properties 的便利性进行日志配置。

非常感谢您对我做错了什么的任何见解。谢谢你

【问题讨论】:

如果您需要在 log4j2.xml 配置中为不同的 spring 配置文件(dev、test、prod 等)设置不同的属性值。您可以访问弹簧配置文件,例如:***.com/a/70471889/4768635 【参考方案1】:

如果我理解你的问题,你正在查看log4j2 的Property Substitution 功能。

您可以在application.properties 文件中定义日志属性,如下所示:

log.file.path=/myDir/logpath 

然后在log4j2.xml 中定义为Property 的属性查找:

<Configuration>  
  <Properties>  
      <property name="LOG_FILE">$bundle:application:log.file.path</property> 
  </Properties>  

现在可以使用$propertyName 表示法在同一个log4j2.xml 中引用所有属性,最终指向来自application.properties 文件的值。

【讨论】:

但是如果我在 YAML 配置中定义了 logging.file.path 呢? Spring Boot 会自动查找并加载 application.properties 和 application.yaml 文件。 @ChetanOswal - 错过了这个,是的,正如 roottraveller 已经提到的那样。 Spring 支持 YML 和 Properties 文件配置,所以两者都可以工作。实际上,您可以在同一个项目下同时拥有具有不同属性的 yml 和属性文件,然后为您加载它就好了。 我试过了 - &lt;Properties&gt; &lt;property name="LOG_FILE"&gt;$bundle:application:logging.file.name&lt;/property&gt; &lt;/Properties&gt; 。它没有用。出现错误 - Can't find bundle for base name application, locale en_US。但是我在 src/main/resources 路径中有那个文件。我正在使用 application.yml。我发现问题仅与 YML 文件有关。如果您使用属性文件,那么上面的工作正常。我需要 YML 文件的解决方案。

以上是关于spring-boot application.properties 文件可以与 log4j2.xml 配置一起工作吗?的主要内容,如果未能解决你的问题,请参考以下文章

Spring-boot01

Spring-boot01

spring-boot:我可以修复 spring-boot 2 中的下一个错误吗?

使用 spring-boot:run 时是不是可以使用 spring-boot 命令行属性?

第二个spring-boot程序

spring-boot 源码解析spring-boot 依赖管理