JUL日志简易上手使用(上)

一JUL是什么?

java.util.Logging 看名字就知道是Java原生的日志框架。不需要使用第三方库,小型简单,是他的优点,也是我为什么选择学习并记录这个日志类。

二JUL框架

JUL一般包含
Logger(记录器) :我们通过logger的api发布日志,logger也是我们日志程序的一个入口。
Handler:logger关联一个handler,logger把日志交给handler处理,handler负责做记录。handler的具体实现决定了日志处理方式。这么设计感觉有一点儿体现了策略设计模式。通过不同的委托实现功能。
Level:日志级别。
Filter: 过滤器,根据需要决定哪些需要被记录。
Formatter:输出格式控制

三.简单创建一个日志并记录一点信息

简单来说就是两步
1.获取Logger logger,这要用静态方法。
2.记录日志:logger.info/logger.log

Logger log = Logger.getLogger();//这里是静态方法
log.info(消息);//记录消息。
log.log();//也是记录有很多重载方法。

log的overload
log(Level level,String msg);
level本条日志级别,msg日志
log(Level level,String msg,Object[] param)
msg作为格式占位符,输出param信息

四.日志级别

JUL提供了七个级别
LEVEL是一个枚举类型,可以枚举
1.SEVERE 严重错误信息终止程序
2.WARNING 程序出错,不会终止
3.INFO 消息记录(默认取值)
4.CONFIG 配置信息,加载配置文件之类的
5.FINE FINEST FINER Debug需要信息记录
6.ALL 开启所有日志级别的开关,不在单条日志使用
7.OFF 关闭所有日志记录,不在单条日志使用
嘛,每个级别对应一个整数,也正是靠整数比较确定该日志是否会记录。
OFF对应 Integer.MAX,所以所有日志都不会高于这个级别,都不会记录
而ALL对应Integer,MIN,所有日志都会记录。
通过log.setLevel();可以更改级别
有意思的是,你可以尝试修改log.setLevel(Level.WARNING)发现的确只输出SEVERE WARNING
但你如果设置CONFIG的话,你会发现没有变化,这是因为日志过滤是由log和Handler协作完成的。不仅Logger有Level的概念,JUL中的另一组件Handler也有Level的概念,Logger对message的输出最终是通过Handler来进行实际操作的,在输出的过程中,Handler组件依然会判断当前需要输出的日志级别跟Handler自身的级别相比是高还是低,只有当前需要输出的日志级别高于或者等于Handler自身的日志级别才会进行输出

五.自定义一些设置

额,默认的是记录info,输出控制台,格式也不能变,过于无聊,我们需要自定义输出级别,格式,位置。
前面已经说了logger就是个入口,内部有Handler完成,我们就是配置Handler
Handler类
ConsoleHandler //输出到控制台
FileHandler // 文件输出
//完整的自定义级别
Logger类的setlevel
Handler setlevel 都使用
//修改输出格式
由Formatter抽象负责完成
在这里面
Handler由Logger绑定 addhandler()方法
Formatter由Handler绑定 setformatter()
嘛,方法名也可以看出Logger对Handler一对多
举个例子


Logger log = Logger.getLogger("");
log.setUseParentHandler(false); //这个将在下一篇描述,关闭系统默认设置,log是由父节点的
ConsoleHandler ch = new ConsoleHandler();
SimpleFormatter sf = new SimpleFormatter();//格式类,使用简单格式
//绑定
ch.setFormatter(sf);
log.addHandler(ch);
//配置级别
ch.setLevel(Level.All);
log.setLevel(Level.All);
//在创建一个文件输出
FileHandler fh = new FileHandler("/xxxx/xxxx/xxx");
//绑定
sh.setFormatter(sf);
log.addHandler(sh);
//配置级别
ch.setLevel(Level.All);
log.setLevel(Level.All);

额,基本上就可以用了,如果还想知道JUL内部一些实现,我将会写第二篇,去看第二篇吧。
PS.也可能不写,毕竟我的博客跟JUL一样,都是我自娱自乐,基本没人用,我从来自己写给自己看的。为什么要我这儿看JUL呢?log4j不强大吗?别人的视频不完备吗?只能说明我们都是懒狗,想快速掌握一门能用简单的东西,所以你看JUL博客,我写JUL博客,至于之后的探究,就看我们的心情吧。
嘛,看完的人你已经学会创建日志,记录日志,自定义一些内容了。为什么还想看下一篇呢?(笑)没有下一篇也无所谓了吧

你可能感兴趣的:(辣鸡杂文)