您经常需要为log4j2设置配置文件吗?

时间:2017-10-17 20:21:44

标签: java log4j2 configuration-files

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

 { // 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的系统属性的一般规则是什么?

  • 每包一次?
  • 每节课一次?
  • 每个父/基类,不管包裹是什么?
  • 还是其他什么?

多个课程和套餐的最佳做法是什么?

1 个答案:

答案 0 :(得分:4)

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

  

您需要多长时间为log4j2设置配置文件?

... 一次

您的OP:No log4j2 configuration file found. Using default configuration中报告的问题是由Log4j无法找到您尝试指向的配置文件引起的。此问题是由于未设置配置文件而导致的。经常就够了。

根据the docs,Log4j将查找其配置源,如下所示:

  
      
  1. Log4j将检查" log4j.configurationFile"系统属性,如果设置,将尝试使用   与文件扩展名匹配的ConfigurationFactory。
  2.   
  3. 如果未设置系统属性,则ConfigurationFactory属性将在类路径中查找log4j2-test.properties。
  4.   
  5. 如果找不到这样的文件,YAML ConfigurationFactory将在类路径中查找log4j2-test.yaml或log4j2-test.yml。
  6.   
  7. 如果找不到这样的文件,JSON ConfigurationFactory将在类路径中查找log4j2-test.json或log4j2-test.jsn。
  8.   
  9. 如果找不到这样的文件,XML ConfigurationFactory将在类路径中查找log4j2-test.xml。
  10.   
  11. 如果找不到测试文件,ConfigurationFactory属性将在类路径上查找log4j2.properties。
  12.   
  13. 如果找不到属性文件,YAML ConfigurationFactory将在其上查找log4j2.yaml或log4j2.yml   类路径。
  14.   
  15. 如果找不到YAML文件,JSON ConfigurationFactory将在类路径中查找log4j2.json或log4j2.jsn。
  16.   
  17. 如果找不到JSON文件,XML ConfigurationFactory将尝试在类路径上找到log4j2.xml。
  18.   
  19. 如果找不到配置文件,将使用DefaultConfiguration。这将导致日志记录输出进入控制台。
  20.   

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

我建议使用-Dlog4j.configurationFile = / path / to / log4j2.xml运行您的应用程序,或者确保log4j2.xml在您的应用程序的类路径中。使用System.setProperty(...)调用乱丢代码的想法感觉就像反模式一样,并且很可能非常脆弱,因为在<{strong> System.setProperty(...)调用之前实例的静态Logger将导致Log4j在知道配置文件位置之前初始化自己。