2012-02-02 22 views
2

我有一些代碼有時會從我自己的Main方法中調用,有時它會嵌入別人的程序中。在配置日誌記錄時,我希望能夠檢測到有人已經配置了Java Util Logging,如果他們有,那麼我想跳過我的配置。我有這樣的方法:如何檢測Java Util Logging是否已配置?

public static boolean isLoggingAlreadyConfigured(){   
    Logger logger = Logger.getLogger(""); 
    Handler[] handlers = logger.getHandlers(); 
    return handlers != null && handlers.length > 1; 
} 

但我認爲這是不可靠的。

你能提出一些更好的建議嗎?

+0

自從我寫了這段代碼之後,這一段時間......並且在SO的光芒中......現在我想知道爲什麼我的handlers.length> 1而不是0 ?! – TiGz 2012-02-02 10:45:56

+0

做了一個快速測試......這是因爲在根記錄器上已經配置了一個默認處理程序。 – TiGz 2012-02-02 10:55:33

回答

3

簡單的答案是java.util日誌記錄是總是配置爲

javadoc對於LogManager表示它是一個自動創建的全局對象,並且它是基於系統屬性的幾個說法自動配置的,或者(如果未設置屬性的話)在日誌記錄屬性配置。 (有關詳細信息,請參閱javadoc)。底線是你永遠不會看到記錄器處於「未配置」狀態。

您可以找出默認情況下JRE的內置日誌記錄屬性配置,並測試以查看當前配置是否不同。但這種方法有一些問題:

  • JRE的內置配置可能已被調整(每個javadoc)。
  • 不同的JRE版本可能有默認值(假設...)。

和最重要的

  • 你可能不能以編程方式區分的默認配置一些應用程序特定的配置。