配置Log4j XML配置的方法

时间:2013-09-15 16:15:04

标签: java web-applications log4j

我正在使用log4j在我的Web应用程序中记录信息。我选择了log4j.xml类型的配置而不是log4j.properties。我记得,对于log4j.properties配置,我没有编写Java代码行来查找log4j.property文件位置。但是,对于log4j.xml文件配置,我明确指定它像这样

DOMConfigurator.configure("log4j.xml");//it reads file from classpath, working!

另外,测试我的应用程序从源代码中删除上述语句。它看起来不起作用。除

外,没有打印任何调试语句

System.out.println();

我已经读过log4j默认在类路径中查找log4jproperties文件或log4j.xml文件。我检查了已部署的Web应用程序,log4j.xml文件位于web-inf / classes中。 即使它找不到log4j.xml。

是这样,上面的代码行对于Java中的log4j xml配置是必需的吗? 实际上,如果没有如上所述的显式规范,Java源代码是否不能从类路径中拾取log4j.xml?

1 个答案:

答案 0 :(得分:2)

来自log4j manual

  

确切的默认初始化算法定义如下:

     
      
  1. 将log4j.defaultInitOverride系统属性设置为任何其他值   那么“false”将导致log4j跳过默认初始化   程序(本程序)。

  2.   
  3. 将资源字符串变量设置为log4j.configuration系统的值   属性。指定默认初始化文件的首选方法   是通过log4j.configuration系统属性。在系统的情况下   未定义属性log4j.configuration,然后设置字符串变量   资源为其默认值“log4j.properties”。

  4.   
  5. 尝试将资源变量转换为URL。

  6.   
  7. 例如,如果资源变量无法转换为URL   由于MalformedURLException,然后从中搜索资源   classpath通过调用org.apache.log4j.helpers.Loader.getResource(resource,Logger.class)   返回一个URL。请注意字符串“log4j.properties”   构成格式错误的网址。有关搜索位置列表,请参阅Loader.getResource(java.lang.String)。

  8.   
  9. 如果找不到URL,则中止默认初始化。否则,请从URL配置log4j。 PropertyConfigurator将用于解析URL以配置log4j,除非URL以“.xml”扩展名结尾,   在哪种情况下将使用DOMConfigurator。您可以选择指定   自定义配置程序。 log4j.configuratorClass系统的值   property被视为自定义的完全限定类名   配置器。您指定的自定义配置程序必须实现   配置器界面。
  10.   

因此,如果没有代码,您可以(并且应该!)定义系统属性以告知配置文件的位置。如果没有,默认情况下它将在类路径中搜索log4j.properties。这是它默认搜索的唯一文件。

系统属性通常被定义为应用(app服务器)的启动参数,类似于-Dlog4j.configuration=path/to/your/config.xml