JDK中的log框架学习总结

最近在看《Agile Java》,看到日志一节,收获颇多,所以发个贴总结和大家分享下。

JDK的日志框架的包名是java.util.logging,主要的类有:

ConsoleHandler 
ErrorManager 
FileHandler 
Formatter 
Handler 
Level 
Logger 
LoggingPermission 
LogManager 
LogRecord 
MemoryHandler 
SimpleFormatter 
SocketHandler 
StreamHandler 
XMLFormatter


其简单用法如下:
Logger logger = Logger.getLogger(getClass().getName());  //根据当前的class.getName()获得日志实例
logger.info(message);  //用日志输出一条info级别的消息;



日志级别有7个等级,分别是:
severe严重、warning警告、info信息、config配置、fine良好、finner较好、finest最好
如果日志对象设置为警告,那么只能输出警告和严重的日志;

JDK中的日志设计使用了 观察者模式,观察者就是Handler,发布日志时会调用所有注册(logger.addHandler(handler))过的Handler中的publish(LogRecord)方法。默认Handler就ConsoleHandler,还有FileHandler、SocketHandler,MemoryHandler。

每条日志都封装在LogRecord对象中。

默认情况下使用的jre\lib\logging.properties配置文件来输出日志,也可以通过java.util.logging.config.file系统属性来自定义日志属性配置文件。例如: java -Djava.util.logging.config.file=myfile

配置文件中有一段
        java.util.logging.FileHandler.pattern = %h/java%u.log

其中%h和%u叫做域,域%h告诉FileHandler将日志文件存储在用户主目录。FileHandler定义很多域,包括%t和%g,%t代表临时目录,%g代表循环计数,联合使用java.util.logging.FileHandler.count和java.util.logging.FileHandler.limit属性。属性limit代表以字节为单位的日志文件的上限。如果为0,表示日志文件大小不做限制。当日志文件的大小达到了上限,FileHandler对象会关闭该文件。域count指定FileHandler可以循环使用多少个日志文件。如果count为1,那么当达到上限时,FileHandler会继续使用原来的日志文件。

配置文件可以定义输出格式,每种格式都是java.util.logging.Formatter的子类,Sun提供了两种实现SimpleFormatter和XMLFormatter,前者生成两行日志信息,后者生成XML格式的日志。

你可能感兴趣的:(jdk,logging)