Re: [問題] Logger.GLOBAL_LOGGER_NAME
自問自答一下:
想了一下,又驗證了一下,
感覺,其實從頭到尾應該都跟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
討論串 (同標題文章)
完整討論串 (本文為第 2 之 2 篇):
java 近期熱門文章
PTT數位生活區 即時熱門文章