首页 > 解决方案 > Spring Log4j2 xml文件位置

问题描述

将 Spring 2.0.5 与 Log4j2 一起使用 如果我将文件 log4j2.xml 放在资源文件夹中,则发现工作正常。但是,发现 monitorInterval="60" 的 log4j2 选项非常有用,就好像某些生产问题可以在不重新启动的情况下增加某些类的日志记录一样。但是,如果 log4j2.xml 嵌入到 jar 中,它当然不能被修改。到目前为止,我能做的最好的事情是使用 2 个 log4j2.xml 副本,一个在资源中,另一个在运行 jar 的文件夹中。

然后我可以运行:

java -Dlog4j.configurationFile=log4j2.xml -jar myapp.jar

如果从 maven spring-boot 插件或 Eclipse 开始,它似乎工作相同。尝试了很多方法,例如设置类路径、绝对文件名等,但没有运气

我的问题是如何从资源文件夹中删除 log4j2.xml 文件并仅在启动 spring 时在命令行上指定它?

标签: springlog4j2

解决方案


我对你的问题并不完全清楚,但我可以提供以下信息,希望能解决这个问题:

  1. Log4j 2.12.0 增加了对 Spring Cloud Config 的支持,增强了对 Spring Boot 的支持。从该版本开始,您可以包含一个名为 log4j2.system.properties 的文件,并在其中放置您想要定义的任何系统属性。它们将在 Log4j 初始化之前设置。因此,如果需要,您可以在此处指定配置的完整 URL,而不是命令行。您还可以将定义添加到名为 log4j2.component.properties 的文件中。
  2. 对 Spring Cloud Config 的支持允许您将配置放置在 Spring Cloud Config 服务器中。有关更多详细信息,请参阅Spring CLoud Config 支持
  3. Spring Boot 初始化日志记录至少 3 次。第一个通常是因为 SpringApplication 类声明了一个 Logger,因此在其他任何事情发生之前初始化日志记录。其配置将使用“正常”log4j 2 初始化。之后,Spring 影响日志记录初始化的方式主要是因为 Spring Boot 设置类路径以将 jars 包含在 Spring Boot jar 中的 BOOT-INF/lib 目录中。

通过使用我上面概述的配置选项之一,您可以将日志配置移到应用程序之外,并且您不需要在资源目录中进行日志配置。实际上,如果您查看 Log4j 中的示例 Spring Cloud Config Application,您会发现它不包含配置文件。


推荐阅读