我需要傳遞一些值以啓用may應用中的某些代碼(在這種情況下,可以選擇在某些情況下啓用某些文件的寫入功能,但可能是任何通常)。在我的代碼中使用log4j傳遞設置標誌的一種方法
我的Java應用程序作爲服務安裝。所以我想到的每種方式都有一些缺點:
- 將另一個參數添加到main():因爲客戶已經安裝了該工具,並且每次都需要更改命令行,所以繁瑣。
- 將java -DmyEnvVar = A_VALUE添加到我的命令行中:與上面相同。
- 設置一個環境變量:至少應該重新啓動服務,即使此時您必須注意運行下的服務是什麼用戶等。
- 在配置文件中添加屬性:我不希望看到這種可見在配置文件,所以用戶不會看到它,這是調試等
所以我想也許有一些方法(或黑客)使用log4j記錄器將該值傳遞給我的代碼。我想到了已經一個標準,儘管是非常有限的:
添加一個虛擬類,我的代碼庫com.dummy.DevOptions
公共類DevOptions { 公共靜態最後記錄器記錄= Logger.getLogger (DevOptions.class);
在我的代碼,這樣使用它:
如果(DevOptions.logger.isInfoEnabled()){// 我做的東西可選} // ... 如果(DevOptions.logger .isDebugEnabled()){// 做其他的東西 }
這讓我使用不同的價值觀之間的區別,我可以通過增加更多的伐木者DevOptions增加的數量。但是我想知道是否有更簡潔的方法,可能只需在log4j.xml中配置記錄器?
如果「DevOptions.isEnabled(」value.A「)」是您唯一可以接受的語法(也許您已經編寫了一些其他支持代碼),那麼這聽起來沒問題。否則,我仍然會顯示靜態specialLogger :) – 2010-03-16 09:34:38
平靜風暴,現在看我的回覆,你能明白我的意思嗎?當我在某些新代碼中需要另一個標誌時,無需繼續添加更多記錄器。現在只能使用一個記錄器,但所需的多個標記都可以使用。 – Persimmonium 2010-03-16 10:21:14