您需要多久设置一次log4j2的配置文件?
我有一个包中有几个类,在我的项目中有几个包。 对于继承,父类中的这些文件是您需要多久设置一次log4j2的配置文件?
{ // File location for log4j2.xml
System.setProperty("log4j.configurationFile",
"file:\\\\" + System.getProperty("user.dir") + "\\Properties\\log4j2.xml");
}
然而,我看到ERROR StatusLogger No log4j2 configuration file found. Using default configuration: logging only errors to the console. Set system property 'log4j2.debug' to show Log4j2 internal initialization logging.
所以,很显然,一次是不够的。
那么我需要设置log4j.configurationFile
的系统属性的一般规则是什么?
- 每包一次?
- 每班一次?
- 每个父母/基类,不管包?
- 还是别的什么?
对于多个类和包,最佳实践是什么?
Log4j 2在初始化时进行配置,即无论何时首次在JVM的实例内创建Logger实例,大约......您的应用程序中声明Logger实例的第一个类会导致Log4j 2初始化自身。所以,这个问题的答案...
你需要多久设置一次log4j2的配置文件?
...是一旦。
您的OP中报告的问题:No log4j2 configuration file found. Using default configuration
是由于Log4j无法找到您试图指向的配置文件而引起的。这个问题是由于不经常设置配置文件导致的而不是。
根据the docs的Log4j将寻找它的配置源如下:
- 的Log4j将检查“log4j.configurationFile”系统属性,如果设置,会尝试使用 加载配置与文件扩展名匹配的ConfigurationFactory。
- 如果没有设置系统属性,则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。这将导致日志记录输出到控制台。
如果您尝试设置log4j.configurationFile
成功,那么选择1
将从事但是尝试不成功,我们知道这是因为你引用的错误信息告诉我们,Log4j是为通过对选项10
下降。
我建议使用-Dlog4j.configurationFile =/path/to/log4j2.xml来运行你的应用程序,或者确保log4j2.xml
在你的应用程序的类路径上。抛弃System.setProperty(...)
调用您的代码的想法感觉像一个反模式,可能会相当脆弱,因为任何静态记录器之前System.setProperty(...)
调用将导致Log4j初始化自己知道您的配置文件位置之前。