Log4j 自定义位置中的属性

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

如果我使用

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

然后我的应用程序与log4j绑定,并破坏了具有ACL和SLF4J的目的。

在应用程序不知道日志记录实现是什么的情况下配置它的最佳方法是什么?


答案 1

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

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

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


答案 2

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