2010-01-15 52 views
1

Logger的Java文檔指出記錄器名稱應該基於類名稱。谷歌吉斯在BinderImpl.java處理這個它具有下列功能:使用Google Guice時遵循日誌記錄標準?

return member == null 
     ? Logger.getAnonymousLogger() 
     : Logger.getLogger(member.getDeclaringClass().getName()); 

然而,因爲它得到一個新的記錄器爲每個類,我會失去一切的訪問可能Handler's已添加到我的記錄器。

什麼是同時處理具有記錄器中使用的類名,並具有一套標準處理器的應用的最佳方式?

回答

4

該解決方案實際上已經無關吉斯,而是基於日誌記錄類在Java中是如何工作的。

記錄器中,用層級設立,因此,記錄x.y.zx.y孩子,一路鏈到根記錄器,其名稱是空字符串。每個記錄器都從父級繼承屬性,如日誌記錄級別。

因此,爲了在全球範圍內設置日誌級別(或設置全局處理程序),只需將它們放在根記錄:

LogManager logManager = LogManager.getLogManager(); 
Logger rootLogger = logManager.getLogger(""); 
rootLogger.setLevel(Level.FINEST); 
rootLogger.addHandler(new ConsoleHandler()); 

一旦這樣做了,任何注入伐木工人將有自己的特性源自根記錄器和任何可能存在的父記錄器。有關基礎的更多信息,請參閱LogManager documentation

A config屬性也存在。每LogManager的文檔:

的屬性 「配置」。此屬性爲 ,旨在允許運行任意 配置代碼。 屬性定義了一個空格或逗號 分隔的類名稱列表。將爲每個 命名類創建一個新的 實例。每個類的默認的構造 可以執行任意 代碼來更新日誌記錄 配置,例如,設置記錄器 水平添加處理程序,加入 濾波器等

這意味着,不存在相應的多個解問題,因爲我也可以使用配置類。

相關問題