【问题标题】:Multiples Log4j.xml configuration depending on scope with Spring多个 Log4j.xml 配置取决于 Spring 的范围
【发布时间】:2021-03-23 02:25:00
【问题描述】:

我想为多个环境(stage、prod、develop)添加不同的 log4j.xml 配置,我的想法是为每个环境添加不同的日志级别,例如在 stage info 日志、prod 错误和警告中.

我正在使用 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 实现这一点?

【问题讨论】:

  • 试试logging.config=classpath:dev/log4j.xml
  • 是的,问题已解决,但现在我没有得到任何日志信息。我删除了主 log4j.xml 文件,似乎 spring 正在使用它而不是我创建的新的 by 范围

标签: spring logging log4j2 scopes


【解决方案1】:

弹簧解决方案

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

春天解决方案

根据the official documentation

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

  • Lo​​g4j 将检查“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。
  • 如果找不到配置文件,将使用 DefaultConfiguration。这将导致日志输出转到控制台。

【讨论】:

    猜你喜欢
    • 2015-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多