2009-10-13 87 views
0

我有一個我開發的應用程序。目前,它的所有配置文件(包括log4j.properties,我使用的一些外部庫)都與我的應用程序一起部署在相同的目錄中。Java包裝問題

因此,我有一個bin目錄,其中包含我的app.jar,再加上一些屬性文件,外加一個lib目錄以及所有外部罐。外部容器在app.jar的清單文件中指定的類路徑中指定。

現在被已頒佈法令,新的結構將是一個bin目錄只用app.jar的權力,用lib DIR處於同一水平(即../lib,相對於bin)外部罐子和一個../etc目錄配置文件。

足夠簡單,我想 - 我將所有類路徑路徑從./lib/<jarname>更改爲../lib/<jarname>,並將../etc也添加到類路徑中。

問題是,現在任何使用log4j的jar都不工作 - 他們沒有看到log4j.properties文件 - 因爲我懷疑app.jar的類路徑不會影響外部jar的類路徑(可能?),之前他們發現它只是因爲它在'。'中。

有什麼想法?

回答

1

只要它在類路徑中,您就可以將log4j.properties放在任何位置。因此,正如@skaffman建議的那樣,將log4j屬性文件放在已存在於類路徑中的etc目錄中。

使用PropertyConfigurator的替代方法是在運行應用程序時設置此syetm屬性。

-Dlog4j.configuration=log4j.properties 
0

因此,問題是Log4J現在不再自動找到配置文件(log4j.properties)了嗎?

據我所知,默認情況下,Log4J將在log4j.properties文件的類路徑中查找目錄。嘗試在JAR的清單文件的類路徑中添加../etc目錄。

另請參閱Log4J手冊中的Default Initialization Procedure,它解釋了Log4J如何查找配置文件以及如何更改此配置文件。

0

log4j.properties必須位於默認包中的某處,在您的情況下,這可能意味着位於該jar文件的根目錄中某處的JAR文件中。

更好的解決方案是將其粘貼在etc目錄中,然後顯式配置log4j以從該位置使用它。你可以使用PropertyConfigurator來做到這一點 - 當你的應用程序啓動時,按照文件名,URL,最適合你的方式調用它。