您的位置:首页 > 编程语言 > Java开发

Java-日志-JdkLogging

2016-07-22 00:00 639 查看
摘要: Java,日志,Log,JdkLogging

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  #<handler>.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<String,LoggerWeakRef>
来存储这些
Logger
,并且设置为弱引用
WeakRef
,这样
JVM
随时回收这些
Logger


Filter设计的比较好,相当于为使用者预留了接口,如果需要可以自己过滤一些不需要记录下来的消息

###代码
http://git.oschina.net/zhengchaoken/ApacheCommonsNote

master/src/test/java/com/zx/jdk/test/JDKLogging.java

#参考文献
http://qingkangxu.iteye.com/blog/1503434

http://www.open-open.com/lib/view/open1430095855349.html

http://blog.csdn.net/u011794238/article/details/50717677

http://blog.csdn.net/qingkangxu/article/details/7514770

http://docs.oracle.com/javase/7/docs/api/index.html?java/util/logging/SimpleFormatter.html

https://kodejava.org/how-do-i-create-a-custom-logger-formatter/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Java 日志 Log