亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

java.util.logging.Logger 的級別與其根 Logger 不同

java.util.logging.Logger 的級別與其根 Logger 不同

慕斯王 2022-06-30 10:45:55
在我的應用程序中,我將根 Loggerjava.util.logging及其所有處理程序設置為Level.FINEST如下所示:Logger.getLogger("").setLevel(Level.FINEST);for (Handler handler : Logger.getLogger("").getHandlers()) {      handler.setLevel(Level.FINEST);}稍后我會創建一個像這樣的類 Logger:private static final Logger JAVA_LOG = Logger.getLogger(MyClass.class.getName());現在這個記錄器級別是INFO(這似乎是 JUL 的默認值),而它的根記錄器級別被正確設置為FINEST. 不應該為根 Logger 設置級別也為根 Logger 的所有子記錄器設置級別嗎?我在檢索類 Logger 時做錯了嗎?
查看完整描述

2 回答

?
www說

TA貢獻1775條經驗 獲得超8個贊

不應該為根 Logger 設置級別也為根 Logger 的所有子記錄器設置級別嗎?


不,顯然您正在創建一個新的 Logger 對象。getLogger 的 Javadoc狀態:


如果創建了一個新的記錄器,它的日志級別將基于 LogManager 配置進行配置,并且它還將配置為將日志輸出發送到其父處理程序。


請注意,即使之前有一個同名的 Logger 對象,您也不能依賴getLogger返回相同的對象,因為如果沒有對該對象的強引用,它可能已被垃圾回收。


如果您的目標是在項目中創建具有相同日志級別的所有 Logger 對象,則不應以編程方式進行,而應通過配置進行。這就是java.util.logging派上用場的地方??傮w優勢是您可以在不同的日志級別運行應用程序,甚至無需更改一行代碼。


只需編輯您的配置文件(本質上就是上面提到的LogManager configuration)。它被調用logging.properties并位于您的 JRE 目錄中。在那里您可以編輯最后一段并配置項目范圍或類縮小的日志級別:


############################################################

# Facility specific properties.

# Provides extra control for each logger.

############################################################


myProject.MyClass.level = FINE

myProject.MyOtherNotSoImportantClass.level = INFO

mySecondProject.MainClass.level = NONE

一個更好的解決方案是復制logging.properties到您的項目目錄并調用您的應用程序


java -Djava.util.logging.config.file=./src/test/resources/logging.properties


查看完整回答
反對 回復 2022-06-30
?
繁星淼淼

TA貢獻1775條經驗 獲得超11個贊

接受的答案是完全有效的,我完全同意。


也就是說,我想補充一點知識……隨心所欲。


private static final Logger JAVA_LOG = Logger.getLogger(MyClass.class.getName());

static { JAVA_LOG.setLevel(null); }

這將告訴它繼承其祖先日志級別。Logger.setLevel() javadoc


如果新級別為空,則意味著此節點應從其最近的祖先處繼承其級別,并具有特定的(非空)級別值。


查看完整回答
反對 回復 2022-06-30
  • 2 回答
  • 0 關注
  • 128 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號