Java日志输出问题
使用java.util.logger的时候,我遇到了一个奇怪的问题。 在JavaAPI文档中,
Logger.setLevel (. )
ettheloglevelspecifyingwhichmessagelevelswillbeloggedbythislogger.messagelevelslowerthanthisvaluewillbediscarded.theleveleleleleveloggggger
但是,我的机器运行结果不是这样。 这个方法不起作用。
我的代码如下。
publicclassProgramFlags{
publicstaticvoidmain (字符串[ ] args ) throwsSecurityException,Exception{
logmanagerlm=log manager.getlogmanager (;
LoggerpatentLog,字段日志;
filehandler XML _ handler=new filehandler (' log _ output.XML );
filehandler html _ handler=new filehandler (' log _ output.html );
patent log=logger.getlogger (parent logger );
child log=logger.getlogger (parent logger.child logger );
部件日志. set level (level.info );
childlog.setlevel(level.all );
lm.addlogger(patentlog );
lm.addlogger(childlog );
XML _ handler.set formatter (newxmlformatter ) );
html _ handler.set formatter (newhtml formatter ) );
child log.addhandler (XML _ handler;
patent log.addhandler (html _ handler );
childlog.log(level.fine,' thisisafinelogmessage ';
patentlog.log(level.severe,' thisisaserverlogmessage ';
xml_handler.close (;
html_handler.close (;
}
}
classhtmlformatterextendsjava.util.logging.formatter
{
@Override
公共字符串格式(日志记录记录) {
//todo自动生成方法
返回('
' ((新日期(record.get millis () ) ) ) ).toString ) )。
' record.getMessage (()、()、)。
' record.getLoggerName (() ) () ) ); }
publicstringgethead(Handlerh ) )。
{
return((n
n ' '
'
TimeLogMessagen '; }
publicstringgettail(handlerh ) )。
{
返回('
nn '; }
}
执行结果:
html文件:
timelogmessagetuejun 102133602:39 CST 2014 thisisafinelogmessageparentloggertuejun 10213602:39 CST 2014 thildlogggertuejun 101014
logSYSTEM'logger.dtd '
2014-06-10T21:23:39
1402406619799
0
ParentLogger.ChildLogger
精细的
testChangeVar.ProgramFlags
主要的
1
thisisafinelogmessage
2014-06-10T21:23:39
1402406619818
1
ParentLogger.ChildLogger
七人组
testChangeVar.ProgramFlags
主要的
1
thisisaserverlogmessage
根据APi的解释,html文件属于patentLog,其等级为Level.INFO,大于Level.FINE,应该放弃FINE信息,但为什么日志文件中有该项目,而且输出源为parared
请大家说明。
---------解决办法----------
childlog.setlevel(level.all ); 所以childlog.log(level.fine,' thisisafinelogmessage ); 此语句输出记录。 这与父logger的级别无关。
child log=logger.getlogger (parent logger.child logger ); 因此,chileLog输出的记录源当然是ParentLogger.ChildLogger
---------解决办法----------
因为暂时不知道这一点,所以建议您查找文档以了解parentlogger和childlogger之间的关系。 最彻底的是看logger的源代码、开源,并不太难。