2013-11-14 28 views
5

我想通過更改系統屬性來使單個配置在多個環境中運行。以下是一個例子:如何爲log4j屬性指定默認值

log4j.appender.file.File=/opt/apps/${myEnvironment}/log/MyService.log 

但是,我想確保它仍然正常工作,如果有人忘記設置系統屬性。有沒有辦法在屬性文件中指定默認值?

回答

2

這可能是可能的。根據org.apache.log4j.PropertyConfigurator的API文檔,您的變量應該首先在系統屬性中查找它的值,如果在那裏沒有找到它,它應該搜索整個配置文件。

所有選項值都允許變量替換。變量 替換的語法與Unix shell相似。 打開「$ {」和關閉「}」之間的字符串被解釋爲一個鍵。 替代變量的值可以定義爲一個系統屬性,或者定義爲 配置文件本身。首先在 系統屬性中搜索密鑰的值,如果在那裏未找到密鑰,則在 中搜索正在解析的配置文件。相應的值替換 $ {variableName}序列。例如,如果將java.home系統 屬性設置爲/ home/xyz,那麼序列號 $ {java.home}的每個匹配項都將被解釋爲/ home/xyz。

https://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/PropertyConfigurator.html

您必須驗證該配置文件中的變量設置將覆蓋雖然系統屬性。