倍数 Log4j.xml 配置取决于范围 Spring

Multiples Log4j.xml configuration depending on scope with Spring

我想为多个环境(阶段、生产、开发)添加不同的 log4j.xml 配置,我的想法是为每个环境添加不同的日志级别,在阶段信息日志中,在生产错误中和警告,例如。

我正在使用 spring-boot-starter-log4j2,我尝试为每个环境定义不同的 log4j.xml 文件,例如:

并且在 application.properties 中我定义了这些文件的路径:

例如:在application-develop

logging.config=src/main/resources/dev/log4j.xml

但我遇到了异常:java.io.FileNotFoundException: (The system cannot find the path specified)

关于我做错了什么的任何想法,或者是否有任何其他方法可以通过 spring 实现这一点?

Spring解决方案

您可以定义 4 个不同的 application-{profile}.properties 每个人都有自己的 logging.config={path_to_xml_file} 属性.

出Spring个解

根据the official documentation

Log4j 具有在初始化期间自动配置自身的能力。当 Log4j 启​​动时,它会定位所有 ConfigurationFactory 插件,并按加权顺序从高到低排列它们。交付时,Log4j 包含四种 ConfigurationFactory 实现:一种用于 JSON,一种用于 YAML,一种用于属性,一种用于 XML.

  • Log4j 将检查“log4j.configurationFile”系统 属性,如果已设置,将尝试使用与文件扩展名匹配的 ConfigurationFactory 加载配置。请注意,这不限于本地文件系统上的某个位置,可能包含 URL
  • 如果未设置系统 属性,ConfigurationFactory 属性将在类路径中查找 log4j2-test.properties。
  • 如果找不到这样的文件,YAML ConfigurationFactory 将在类路径中查找 log4j2-test.yaml 或 log4j2-test.yml。
  • 如果找不到这样的文件,JSON ConfigurationFactory 将在类路径中查找 log4j2-test.json 或 log4j2-test.jsn。
  • 如果找不到这样的文件,XML ConfigurationFactory 将在类路径中查找 log4j2-test.xml。
  • 如果找不到测试文件,ConfigurationFactory 属性将在类路径中查找 log4j2.properties。
  • 如果找不到属性文件,YAML ConfigurationFactory 将在类路径中查找 log4j2.yaml 或 log4j2.yml。
  • 如果找不到 YAML 文件,JSON ConfigurationFactory 将在类路径中查找 log4j2.json 或 log4j2.jsn。
  • 如果无法找到 JSON 文件,XML ConfigurationFactory 将尝试在类路径中找到 log4j2.xml。
  • 如果找不到配置文件,将使用默认配置。这将导致日志输出到控制台。