2010-11-19 105 views
1

我們的Java WebStart應用程序不包含log4j配置文件;它只是設置了一些硬編碼記錄器和appender。使用Java Web Start的log4j配置

我希望個人客戶能夠在某處放置log4j.properties文件,並在故障排除情況下設置自己的自定義日誌記錄。我可以將log4j.properties文件捆綁到某個應用程序的其中一個jar文件中,這將允許進行配置,但對於每個客戶端而言,配置都是相同的,而不僅僅是影響要排除故障的客戶端。另外,我無法在運行中更改設置。

有沒有辦法阻止log4j initialization procedure使用每個客戶端的配置文件?

回答

3

這裏的基本問題是,Java Web Start嚴重限制了對機器的訪問。

如果您正在運行已簽名的應用程序並且用戶允許您完全訪問機器,則應該可以執行此操作。如果沒有,你不能用log4j和默認機制來做到這一點。

您可能希望編寫自己的配置程序,該配置程序使用Java WebStart API從文件系統讀取數據,然後將數據提供給log4j,但這需要一些精力。

+0

我確實可以完全訪問機器。希望我不必編寫自己的配置器,因爲我希望能夠在已部署的某些機器上執行此操作,而無需編寫新的代碼和升級。 – skiphoppy 2010-11-19 17:25:52

+0

如果您有完全訪問機器的權限,那麼 - 未經測試 - 在jnlp文件中設置log4j.configuration系統屬性。有關詳細信息,請參見http://logging.apache.org/log4j/1.2/manual.html - 「默認初始化過程」一節。 – 2010-11-19 17:32:08

1

您可以使用PersistenceService在本地用戶的計算機上存儲log4j配置(無需簽名即可工作),或者至少在啓動web啓動應用程序時存儲是否加載特殊配置的標誌。

還有一個FileOpenService,最終用戶可以通過它打開本地log4j.xml文件,以實時重新配置日誌記錄工具。這樣,用戶可以控制配置,並且可以控制何時何地應用它。

使用FileOpenService將流傳輸到log4j配置文件的應用程序代碼可以使用DOMConfigurator.configure(InputStream)重新配置log4j。