gpt4 book ai didi

java - 多久需要设置一次log4j2的配置文件?

转载 作者:行者123 更新时间:2023-12-01 17:54:09 25 4
gpt4 key购买 nike

我的一个包中有几个类,我的项目中有几个包。对于那些继承的文件,在父类中是

 { // File location for log4j2.xml
System.setProperty("log4j.configurationFile",
"file:\\\\" + System.getProperty("user.dir") + "\\Properties\\log4j2.xml");
}

但是,我看到错误 StatusLogger 未找到 log4j2 配置文件。使用默认配置:仅将错误记录到控制台。设置系统属性“log4j2.debug”以显示 Log4j2 内部初始化日志记录。

所以,显然,一次是不够的。

那么我需要设置 log4j.configurationFile 的系统属性的一般规则是什么?

  • 每包一次?
  • 每堂课一次?
  • 每个父类/基类,无论包如何?
  • 还是别的什么?

多个类和包的最佳实践是什么?

最佳答案

Log4j 2 在初始化时配置自身,即每当在 JVM 实例中首次创建 Logger 实例时,大约...应用程序中声明 Logger 实例的第一个类会导致 Log4j 2 初始化自身。那么,这个问题的答案...

How often do you need to set the configuration file for log4j2?

...是一次

OP 中报告的问题:未找到 log4j2 配置文件。使用默认配置 是由于 Log4j 无法找到您尝试指向的配置文件而导致的。此问题不是是由于“设置配置文件”不够频繁造成的。

根据the docs Log4j将按如下方式查找其配置源:

  1. Log4j will inspect the "log4j.configurationFile" system property and, if set, will attempt to load the configuration using the ConfigurationFactory that matches the file extension.
  2. If no system property is set the properties ConfigurationFactory will look for log4j2-test.properties in the classpath.
  3. If no such file is found the YAML ConfigurationFactory will look for log4j2-test.yaml or log4j2-test.yml in the classpath.
  4. If no such file is found the JSON ConfigurationFactory will look for log4j2-test.json or log4j2-test.jsn in the classpath.
  5. If no such file is found the XML ConfigurationFactory will look for log4j2-test.xml in the classpath.
  6. If a test file cannot be located the properties ConfigurationFactory will look for log4j2.properties on the classpath.
  7. If a properties file cannot be located the YAML ConfigurationFactory will look for log4j2.yaml or log4j2.yml on the classpath.
  8. If a YAML file cannot be located the JSON ConfigurationFactory will look for log4j2.json or log4j2.jsn on the classpath.
  9. If a JSON file cannot be located the XML ConfigurationFactory will try to locate log4j2.xml on the classpath.
  10. If no configuration file could be located the DefaultConfiguration will be used. This will cause logging output to go to the console.

如果您尝试设置 log4j.configurationFile 成功,则选项 1 将被启用,但该尝试未成功,我们知道这一点,因为您引用的错误消息告诉我们我们发现 Log4j 正在陷入选项 10

我建议使用 -Dlog4j.configurationFile=/path/to/log4j2.xml 运行您的应用程序,或者确保 log4j2.xml 位于您应用程序的类路径上。用 System.setProperty(...) 调用乱扔代码的想法感觉像是一种反模式,并且可能非常脆弱,因为之前实例化的任何静态 Logger System.setProperty(...) 调用将导致 Log4j 在了解您的配置文件位置之前对其进行初始化。

关于java - 多久需要设置一次log4j2的配置文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46798573/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com