覆盖 log4j.properties

我的java应用程序引用了一个使用log4j日志记录的第三方jar文件。问题是这个jar包含它自己的log4j.properties文件,这会导致我的机器上出现访问被拒绝的异常,但我无法控制jar文件来更改其内容。

我尝试在应用程序的类路径中添加自己的log4j.properties文件,但它似乎没有效果。如果我尝试使用 PropertyConfigurator 以编程方式导入我自己的设置,log4j 似乎首先加载 jar 文件的属性文件(导致异常)。

如何使log4j短路以忽略第三方jar文件的log4j.properties文件并使用我自己的文件?


答案 1

有几种方法可以覆盖log4j.properties,其中之一是:

  • 使用log4j.xml请参阅扩展

另一种方法是:

  • log4j.defaultInitOverride 系统属性设置为任何其他值,然后“false”将导致 log4j 跳过默认初始化过程(此过程)。
  • 将资源字符串变量设置为 log4j.configuration system 属性的值。指定默认初始化文件的首选方法是通过 log4j.configuration 系统属性。如果未定义系统属性 log4j.configuration,请将字符串变量资源设置为其默认值“log4j.properties”。
  • 尝试将资源变量转换为 URL。
  • 如果资源变量无法转换为 URL,例如由于格式错误的 URLException,则通过调用 org.apache.log4j.helpers.Loader.getResource(resource, Logger.class) 从类路径中搜索资源,这将返回一个 URL。请注意,字符串“log4j.properties”构成了格式错误的 URL。请参阅 Loader.getResource(java.lang.String) 以获取搜索位置的列表。
  • 如果找不到 URL,请中止默认初始化。否则,请从 URL 配置 log4j。属性配置器将用于解析 URL 以配置 log4j,除非 URL 以“.xml”扩展名结尾,在这种情况下将使用 DOMConfigurator。您可以选择指定自定义配置器。log4j.configuratorClass 系统属性的值将用作自定义配置器的完全限定类名。您指定的自定义配置器必须实现配置器接口。

编号: http://logging.apache.org/log4j/1.2/manual.html


答案 2

如果这些都不起作用

在应用配置中添加以下语句

BasicConfigurator.configure();

它为我工作