1

我正在使用 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 吗?

4

1 回答 1

2

来自log4j 手册

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

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

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

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

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

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

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

系统属性通常定义为您的应用程序(应用程序服务器)的启动参数,例如-Dlog4j.configuration=path/to/your/config.xml.

于 2013-09-15T20:21:42.447 回答