Java 自定义位置中的Log4j属性

Java 自定义位置中的Log4j属性,java,properties,log4j,propertyconfigurator,Java,Properties,Log4j,Propertyconfigurator,我将Apache Commons日志和SLF4J与log4j一起使用,但我还希望在自定义位置(如conf/log4.properties)中使用log4j.properties。问题是: 如果我使用 PropertyConfigurator.configure("conf/log4j.properties"); 然后,我的应用程序与log4j绑定,并破坏了拥有ACL和SLF4J的目的 在应用程序不知道日志实现是什么的情况下,配置它的最佳方法是什么?我认为最简单的方法是使用log4j.con

我将Apache Commons日志和SLF4J与log4j一起使用,但我还希望在自定义位置(如conf/log4.properties)中使用log4j.properties。问题是:

如果我使用

  PropertyConfigurator.configure("conf/log4j.properties");
然后,我的应用程序与log4j绑定,并破坏了拥有ACL和SLF4J的目的


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

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


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

正如您所说,通过调用
属性配置器,您将应用程序绑定到log4j。然而,这种联系的范围相当有限。您可以很容易地删除调用
PropertiesConfigurator
的行并重新编译代码。完成后,假设您正在使用SLF4J API进行日志记录,您可以使用另一个日志记录框架(比如logback classic或j.u.l.)重新安装log4j,只需替换jar文件即可。因此,SLF4J在很大程度上仍能发挥其作用。我不会把婴儿和洗澡水一起扔掉。

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


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

实际上,我遇到了与OP相同的问题,但您的解决方案对我不起作用。我必须以URL样式的形式(-Dlog4j.configuration)指定log4j.properties文件的位置=file:///my/conf/log4j.properties).全体投票。在Windows 7机器上的jboss 5.1 eap上,在file:-Dlog4j.configuration=file:/C:/JBoss51/jboss-eap-5.1/…/log4j.properties后仅用一个正斜杠为我工作。@kdgregory…我们在哪里指定文件的位置,它是在eclipse项目运行配置中的VM参数中,还是在tomcat中的配置文件中?@Haes这也是我的解决方案,应该也是公认的答案。谢谢:)这在Linux上对我不起作用。我必须添加文件:(例如,java-Dlog4j.configuration=file:/path/to/log4j.properties-classpath…)
java -Dlog4j.configuration=conf/log4j.properties -classpath ...