Log学习--Java原生日志系统JUL的基础使用
1、Java通过 java.util.logging 包(即JUL)下的各个类提供了原生的日志记录和输出的支持,其中主要有4种类:
1. Formatter : 日志输出格式,这也是一个抽象类,具体子类比如 SimpleFormatter 代表纯文本的简单格式,XMLFormatter 代表XML格式等。
2. Handler :日志输出类,其本身是一个抽象类,具体子类对应不同的日志输出出口,比如 FileHandler 代表日志输出到一个本地文件,ConsoleHandler 代表日志输出到控制台,SocketHandler 代表日志输出到套接字即网络上等。
3. Logger :日志记录类,我们就调用这个类的API进行日志记录
4. Level:定义了各种日志级别。
2、Formatter : 日志输出格式
JUL为我们提供了两种格式,一种是 SimpleFormatter 普通文本格式,一种是 XMLFormatter XML格式,根据自己的需求创建对应的对象即可:
//简单文本格式的Formatter
Formatter sf = new SimpleFormatter();
//xml格式的Formatter
Formatter xf = new XMLFormatter();

3、Handler :日志输出类
这个类决定了我们的日记最后输出到哪里,JUL 提供了 5 种实现类,我们最常用的就是 FileHandler 和 ConsoleHandler, 一个对应文件一个对应控制台。
//输出到文件的Hander
FileHandler fh = new FileHandler(日志文件的路径);
//可以为Handler设置Formatter,默认使用简单文本格式
fh.setFormatter(Formatter对象);
//Handler可以控制输出的日志级别
fh.setLevel(Level.INFO);
//输出到控制台的handler
Handler ch = new ConsoleHandler();
//Handler可以控制输出的日志级别
ch.setLevel(Level.INFO);

4、Logger :日志记录类
定义了Formatter 和 Handler,我们就可以创建最终的日志记录类对象了,我们的实际代码中主要调用这个对象的接口进行日志记录。
// 获取Logger实例,相同名称对应一个实例,通常使用类名
Logger logger = Logger.getLogger(日志记录实例名称);
// 添加Handler,可以配置多个,将日志输出到多个地方
logger.addHandler(Handler对象);
logger.addHandler(Handler对象);
//指定logger输出的日志级别, 低于该级别的日志不会输出
logger.setLevel(Level.INFO);

5、Level:日志级别,包含如下值:
ALL : Integer.MIN_VALUE (全部输出)
FINEST :300
FINER :400
FINE :500
CONFIG : 700
INFO :800
WARNING :900
SEVERE :1000
OFF : Integer.MAX_VALUE ( 不输出任何日志)
6、有了上面所有的准备工作,我们就可以在代码中调用 Logger 对象记录日志了,Logger提供了两种记录日志的方式,一种是调用时手动指定日志级别,一种是调用特定级别的方法,比如:
// 手动指定日志级别
logger.log(Level.INFO, "this is a info log");
// 调用特定日志级别对应的方法
logger.info("this is a info log");
JUL 还支持我们在日志中使用标记({数字})和参数,来生成特定的更有意义的日志信息(更多形式可参考截图或自行研究):
logger.log(Level.WARNING, "this is a warn, {0} {1}", new Object[]{"p1", "p2"});
