2010-10-22 23 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