覆盖log4j.properties


问题内容

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

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

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


问题答案:

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

  • 使用log4j.xml 请参阅扩展名

另一种方法是:

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

参考:http :
//logging.apache.org/log4j/1.2/manual.html