2014-10-28 15 views
0

我有很多次被調用的代碼,甚至調用logger.isDebugEnabled()的代價太大。 我可以將isDebugEnabled()值存儲到該類的靜態變量中,但是後來我放棄了在服務器運行期間啓用調試的選項。
今天我所有對Log4J的調用都是由自定義包裝完成的。
我想實現一個解決方案,如果沒有記錄器被設置爲調試,我將能夠通過檢查一些全局布爾變量,並且只有當一個或多個記錄器被設置爲調試時纔會返回ASAP,包裝器將轉發到Log4J的調用。檢查在Log4J中是否有一個記錄器設置爲DEBUG

如果有一個或多個記錄器設置爲調試,是否有方法可以詢問Log4J配置? 這樣,我可以每5秒檢查一次,並打開/關閉全局布爾值,這將被我的包裝器使用。

回答

0

如果你有Log4j的性能問題,我建議看看logback

如果您需要堅持使用log4j,您可以執行以下操作之一。 以下代碼將檢查根記錄器的日誌記錄級別。這可能是你所需要的。

Level level = LogManager.getRootLogger().getLevel(); 
if(level == Level.DEBUG) 
    System.out.println("DEBUG"); 

如果你確實想檢查每一個記錄器,你可以這樣做。

for (Enumeration<Logger> en = LogManager.getCurrentLoggers(); en.hasMoreElements();) 
    System.out.println(en.nextElement().isDebugEnabled()); 

爲了完整起見,您可以使用以下命令更改根日誌記錄級別。

LogManager.getRootLogger().setLevel(Level.DEBUG); 
+0

如果在特定類上啓用了調試,LogManager.getRootLogger()。getLevel()是否返回true? @ Zig158 – 2014-10-29 06:21:19

+0

不,我剛剛用Logj4 1.2.17進行了測試。 如果您正在從嚴密的外觀進行日誌記錄,只需在循環的開頭檢查isDebugEnabled()。 – Zig158 2014-10-30 18:49:05