2010-10-22 57 views
1

有没有办法在加载之前将数据或设置传递给log4j,然后在配置文件中使用该属性。在加载之前将属性传递给log4j

我是假设有一个系统属性,我可以使用:

log4j.appender.R.File =在/ usr /本地/ PFS /日志/ $ {} ws.host /log4j.log

其中ws.host是我想要使用的属性。

但我该如何设置该值?

此外,我在一个网络环境。我怎么知道在log4j加载之前在什么时候设置属性设置。

+0

你是说通过代码或通过命令行参数设置它? – aperkins 2010-10-22 15:04:48

+0

我在网络环境中。我希望我可以在代码System.properties.put()中设置log4j设置?然后在我的log4j文件中设置配置。 – 2010-10-22 15:12:51

回答

4

默认的log4j PropertiesConfigurator支持变量替换。

所以,你可以通过这样的"-DmyProject.logFile="/temp/test.log"系统属性到Java启动,然后在文件中有"log4j.appender.R.File=${myProject.logFile}"属性。

如果在网络环境下工作,您可能需要查看Spring的Log4jConfigListener。它使用监听器(Servlet API 2.4+)在其他组件之前初始化log4j。即使不使用Spring,也应该能够使用源代码来轻松创建自己的侦听器。

+0

它可以在这里帮助您使用不同于log4j.properties的log4j配置文件名,然后在代码中设置log4j.configuration之后显式调用PropertyConfigurator。这使您可以更好地控制log4j配置序列。它需要您以前不使用任何记录器 - Logger类型的静态最终变量在这里也存在问题... – 2015-11-09 08:19:52