14

我将 Apache Commons Logging 和 SLF4J 与 log4j 一起使用,但我也想在 conf/log4.properties 等自定义位置使用 log4j.properties。这是问题所在:

如果我使用

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

然后我的应用程序与 log4j 相关联,并违背了拥有 ACL 和 SLF4J 的目的。

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

4

3 回答 3

26

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

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

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

于 2009-05-17T23:06:18.757 回答
3

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

于 2009-05-29T13:41:28.913 回答
1

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

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

于 2010-03-05T19:54:22.593 回答