我在一个包中有几个类,在我的项目中有几个包。 对于那些继承的文件,在父类中是
{ // 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
的系统属性的一般规则是什么?
多个课程和套餐的最佳做法是什么?
答案 0 :(得分:4)
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(...)
调用乱丢代码的想法感觉就像反模式一样,并且很可能非常脆弱,因为在<{strong> System.setProperty(...)
调用之前实例的静态Logger将导致Log4j在知道配置文件位置之前初始化自己。