如何在 Spring Boot 应用程序中指定 Log4j2 配置文件

Posted

技术标签:

【中文标题】如何在 Spring Boot 应用程序中指定 Log4j2 配置文件【英文标题】:How to specify Log4j2 configuration file in spring boot application 【发布时间】:2019-11-03 12:49:16 【问题描述】:

我在我的 Spring Boot 应用程序中使用 log4j2。这适用于所有方面:不包括 slf4j,包括 log4j2 等。

但是当应用程序部署时,我需要为每个目标主机自定义文件。我创建了一个可以执行此操作的 ansible 角色。最终我得到了一个 log4j2.xml 文件部署在另一个目录中,例如/prod/produsrX/data/log4j2.xml。

我正在使用 spring-boot-maven-plugin “重新打包”目标来生成可执行的 jar 文件。这似乎并不重要,但它是问题中的一个数据点。

这应该是项目中最简单的部分。总是在我能够设置 -Dlog4j.configurationFile 之前 - 建议在大约 3,000 个网页上得到回应,并且在 Spring Boot 2.1.3 中不起作用。

我找到的最有用的信息是this question。它谈到使用 -Dlogging.config 因为必须在读取其他属性之前初始化日志记录。不幸的是,这也没有帮助。

我确实找到了一个示例,该示例建议在 java 的 -classpath 参数中指定上述目录。但这也无济于事。

有谁知道如何让 Spring Boot 应用程序读取 log4j2.xml 文件?

【问题讨论】:

【参考方案1】:

该属性实际上必须放入应用程序上下文中(例如 application.yml)。使用 -D 属性不起作用!

记录: 配置:/prod/produsrX/data/log4j2.xml #log4j.xml 的完全限定名称

【讨论】:

我不确定我是否遵循。据我所知,使用 -D 有效。我查看了您问题中的 SO 链接,并尝试了 -Dlogging.config,它有效。更准确地说,我同时使用 -Dlog4j.configurationFile 和 -Dlogging.config,前者用于应用程序启动时,后者用于完成初始化并实际使用时。两者都指向同一个 XML 配置文件,该文件以完整路径的形式给出,并且都被使用。即使重新配置正在运行的应用程序也可以,只需更改配置文件即可(我没有做任何事情来实现这一点,它“正常工作”)。

以上是关于如何在 Spring Boot 应用程序中指定 Log4j2 配置文件的主要内容,如果未能解决你的问题,请参考以下文章

如何在请求正文 Spring Boot Rest Controller 中指定订单验证

在 Spring Boot 和 Spring WebFlux (Netty) 中指定服务器请求超时

除了在 Spring Boot 应用程序的 bootstrap.properties 中指定之外,有没有办法为 Slueth 提供 Spring 应用程序名称?

Spring Boot 未加载 application.yml 中指定的密钥库

Spring Boot 应用程序未连接到 Mongodb 的 application.property 中指定的数据库

在 spring boot application.properties 中指定信任存储信息