JDK的日志框架的包名是java.util.logging, [@since](http://my.oschina.net/u/266547) 1.4 ,代码在rt.jar中 相当于其它日志,即使这个日志不需要额外配置依赖、开箱即用,但在项目实践中使用的太少太少了。今天简单理下,顺便看下代码。 ###简单使用
java.util.logging.Logger logger = java.util.logging.Logger.getLogger(getClass().getName());
logger.info("info");
###概念
Level 日志级别
Formatter 日志信息格式化
Handler 处理日志到哪里去。类似Appender
LogRecord 来描述日志记录消息
###lever 定义在java.util.logging.Lever.java
OFF(Integer.MAX_VALUE 关闭)—>SEVERE(1000 严重)—>WARNING(900 警告)—>INFO(800 信息)—>CONFIG(700 配置)—>FINE(500 良好)—>FINER(400 较好)—>FINEST(300 最好)—>ALL(Integer.MIN_VALUE 打印所有)
###Formatter 包内提供二种格式化:SimpleFormatter 文本形式记录,XMLFormatter XML格式形式记录。
SimpleFormatter String.format(format, date, source, logger, level, message, thrown); 参数解释如下:
format - the java.util.Formatter format string specified in the java.util.logging.SimpleFormatter.format property or the default format.
默认值应该是:"%1$tb %1$td, %1$tY %1$tl:%1$tM:%1$tS %1$Tp %2$s%n%4$s: %5$s%6$s%n";
date - a Date object representing event time of the log record.
source - a string representing the caller, if available; otherwise, the logger's name.
logger - the logger's name.
level - the log level.
message - the formatted log message returned from the Formatter.formatMessage(LogRecord) method. It uses java.text formatting and does not use the java.util.Formatter format argument.
thrown - a string representing the throwable associated with the log record and its backtrace beginning with a newline character, if any; otherwise, an empty string.
可以据此来实现自己的Formatter.
###Handler 包内提供了 MemoryHandler和StreamHandler两个大类Handler。 StreamHandler又包括ConsoleHanler, FileHandler以及SocketHandler三个实现,它们分别将日志写入控制台、文件、Socket端口。
MemoryHandler中是一个LogRecord的1000个长度的数组,循环存储日志.
ConsoleHandler从System.err输出setOutputStream(System.err);
SocketHandler 输出new Socket(host, port)
FileHandler 输出new Socket(host, port) "%h/java%u.log"
###配置文件 如果配置了日志配置文件的环境变量java.util.logging.config.file就使用这个配置文件,如果没有配置就使用 %java.home%/jre/lib/logging.properties
Tomcat配置了java.util.logging.config.file
bin/catalina.bat中配置: set LOGGING_CONFIG=-Djava.util.logging.config.file="%CATALINA_BASE%\conf\logging.properties"
默认在程序中使用一般不会配置这个变量,那就会使用默认的%java.home%/jre/lib/logging.properties 配置文件。
###配置项 %java.home%/jre/lib/logging.properties 中的配置项摘录
handlers= java.util.logging.FileHandler #或java.util.logging.ConsoleHandler
.level= INFO # Default global logging level.
java.util.logging.ConsoleHandler.level = INFO #.xxx是配置具体某个handler的属性
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
com.xyz.foo.level = SEVERE #对特定的包下的级别限定
###其它
Logger被设计为protected的构造函数,这样在一定程序上不允许直接实例’。程序中多通过Logger.getLogger来获取。这里调用全局的LogManager来获取Logger。
LogManager是用来管理Logger的,它用Hashtable来存储这些Logger,并且设置为弱引用WeakRef,这样JVM随时回收这些Logger。
Filter设计的比较好,相当于为使用者预留了接口,如果需要可以自己过滤一些不需要记录下来的消息
###代码 http://git.oschina.net/zhengchaoken/ApacheCommonsNote
master/src/test/java/com/zx/jdk/test/JDKLogging.java