2013-10-11 104 views
2

我想知道是否有一種方法來定義appenders(文件,控制檯等)在一個不同的文件,而不是定義實際的日誌記錄屬性。 這個想法來自我正在開發的系統,我們有以下要求: 不同版本的系統將部署在同一臺服務器上。所以爲了不保留不同的log4j屬性文件,它們都會設置相同的屬性,並在文件appender上有所不同(以便知道從哪個版本的系統記錄哪個日誌)。 預先感謝您Log4j不同的屬性文件的Appenders

+0

每個版本是否在單獨的JVM中運行? –

+0

是的,但不是在不同的容器上。 – airmil

回答

1

您可以使用DOMConfigurator或PropertyConfigurator從外部文件加載您的log4j設置。您可以在運行時多次調用此API以從不同來源加載設置。

在你的情況下,你可以從另一個基於版本的屬性文件動態地加載Appender細節。只需將一些版本ID後綴到文件名並以通用的方式從代碼加載它。

0

如果在不同虛擬機進程(在不同的端口上)上運行的每個版本都可以向虛擬機添加參數。例如:

-Dmysystem.version=1.0.1 

如果使用XML配置:

<param name="file" value="/logs/system.v${mysystem.version}.log" /> 

如果您正在使用的屬性:

log4j.appender.ROLL.File=/logs/system.v${mysystem.version}.log 

在這兩種情況下,生成的文件可能是:

/logs/system.v1.0.1.log 

這樣,你可以n維護一個配置文件和動態文件名。

+0

不幸的是,情況並非如此,因爲它們運行在不同的虛擬主機上,而不是不同的端口 – airmil

+0

幸運的是,它可以工作,甚至可以對每個文件添加主機名。 –