Re: [問題] Logger.GLOBAL_LOGGER_NAME

看板java作者 (無尾熊)時間11年前 (2013/10/25 22:38), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/2 (看更多)
自問自答一下: 想了一下,又驗證了一下, 感覺,其實從頭到尾應該都跟global logger沒關係。 也就是說,其實應該不用去理會那個Logger.GLOBAL_LOGGER_NAME 如果Logger實例沒有任何組態設定,預設取得的Logger實例, 其層級必須大於或等於其父Logger實例設定的Level.INFO,才會輸出訊息。 所以, 第一步要(假設要輸出大於等於FINE層級的訊息): Logger logger = Logger.getLogger(Some.class.getName()); logger.setLevel(Level.FINE); 第二步: 因為Logger實例logger本身沒有Handler,所以會使用“父”Handler, 其預設是ConsoleHandler,層級是Level.INFO 所以第二步,基本上有兩個做法,一個是去改父Handler的層級, 另一個是去new一個handler加到本身logger: 第二步第一個方法:改父Handler的層級: for(Handler h : logger.getParent().getHandlers()) h.setLevel(Level.FINE); 第二步第二個方法:new 一個新的Handler Handler h = new ConsoleHandler(); h.setLevel(Level.FINE); logger.addHandler(h); 基本上,結論就是不用去理會Logger.GLOBAL_LOGGER_NAME 我把書上這一兩頁的Logger.GLOBAL_LOGGER_NAME都改成"父", 發現好像就通了,跟大家分享一下... 我猜作者要提到Logger.GLOBAL_LOGGER_NAME只是要說明Logger實例在沒有作 任何組態設定的情況下,會跟Logger.GLOBAL_LOGGER_NAME的情況一樣。 不過我發現其實不一樣啊,應該是會跟Logger.GLOBAL_LOGGER_NAME的父組態一樣。 所以才一直轉不出來。總之不要理會global了,改成父就可以通了, 也驗證應該無誤,書上的例子也都是去更改父的設定來完成輸出。 以上,不知道理解有無錯誤,還請有經驗的前輩們指導。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.45.140.89
文章代碼(AID): #1IQe9stf (java)
文章代碼(AID): #1IQe9stf (java)