自定义位置中的Log4j属性

我正在使用Apache Commons Logging和SLF4J和log4j,但我也想在conf / log4.properties这样的自定义位置使用log4j.properties。 这是问题所在:

如果我使用

PropertyConfigurator.configure("conf/log4j.properties"); 

然后我的应用程序绑定到log4j并且失败了拥有ACL和SLF4J的目的。

如果没有应用程序知道日志记录实现是什么,配置它的最佳方法是什么?

我认为最简单的方法是使用log4j.configuration系统属性指定文件的位置。 采用Log4J手册中的示例:

 java -Dlog4j.configuration=conf/log4j.properties -classpath ... 

我相信Log4J会在类路径的任何地方找到一个名为“log4j.properties”的文件,但可能会产生幻觉。 但值得一试。

正如您所说,通过调用PropertiesConfigurator ,您将应用程序绑定到log4j。 然而,这种联系的延伸是非常有限的。 您可以非常轻松地删除调用PropertiesConfigurator的行并重新编译代码。 完成之后,假设您使用SLF4J API进行日志记录,您可以使用另一个日志框架重新记录log4j,例如logback-classic或jul,只需替换jar文件即可。 因此,SLF4J仍然在很大程度上达到其目的。 我不会用洗澡水把婴儿扔出去。

您可以使用VM参数指定配置文件位置

-Dlog4j.configuration="file:/C:/workspace3/local/log4j.properties"