作者embman (无尾熊)
看板java
标题Re: [问题] Logger.GLOBAL_LOGGER_NAME
时间Fri Oct 25 22:38:44 2013
自问自答一下:
想了一下,又验证了一下,
感觉,其实从头到尾应该都跟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