JUL
JUL简介
- JUL全称java util Logging是java原生的日志框架
- 使用时不需要另外引用第三方类库
JUL架构
- Loggers:被称为记录器,应用程序通过获取Logger对象,调用其API来发布日志信息。Logger通常是应用程序访问日志系统的入口程序
- Appenders:也被称为Handlers,每个Logger都会关联一组Handlers,Logger会将日志交给关联Handlers处理,由Hanlders负责将日志做记录。Handlers在此是一个抽象,其具体的实现决定了日志记录的位置可以是控制台,文件,网络上的其他日志服务或操作系统日志等。
- Layouts:也被称之为Formatters,它负责对日志事件中的数据进行转换和格式化。Layouts决定了数据在一条日志记录中的最终形式。
- Level:每条日志消息都有一个关联的日志级别。该级别粗略指导了日志消息的重要性和紧迫,可以将Level和Loggers,Appenders做关联以便于我们过滤消息。
- Filters:过滤器,根据需要定制哪些信息会被记录,哪些信息会被放过。
JUL日志级别
日志级别是有int值的,比如info是800,WARNING是900
默认是info级别那么比info int值大的级别也会默认开启例如WARNING
- SEVERE——严重的问题造成了程序的终止
- WARNING——警告虽然问题不会造成程序的终止但也需要关注
- INFO——记录一些信息
- CONFIG——配置文件一些参数
- FINE——debug 日志记录
- FINER——debug 日志记录
- FINEST——debug 日志记录
- ALL——表示开启所有日志级别
- OFF——表示不开启所有日志级别
JUL的Logger具有父子关系
- 根据包名来获取Logger对象
- 最顶级的Logger对象是LogManager$RootLogger
- java代码
@Test
public void test03(){
//1.获取日志记录器对象
Logger log1 = Logger.getLogger("cn.shanguoyu.log.jul.JULTest");
Logger log2 = Logger.getLogger("cn.shanguoyu.log.jul");
Logger log3 = Logger.getLogger("cn.shanguoyu.log");
Logger log4 = Logger.getLogger("cn");
System.out.println(log1.getParent()==log2);
System.out.println(log2.getParent()==log3);
System.out.println(log4.getParent());
}
JUL自定义配置文件
- 不配置配置文件默认会去读取jdk中的logging.properties文件
- 自定义配置文件
handlers= java.util.logging.ConsoleHandler
.level= ALL
java.util.logging.FileHandler.pattern = %h/java%u.log
java.util.logging.FileHandler.limit = 50000
java.util.logging.FileHandler.count = 1
java.util.logging.FileHandler.maxLocks = 100
java.util.logging.FileHandler.formatter = java.util.logging.XMLFormatter
java.util.logging.ConsoleHandler.level = ALL
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
- java代码
@Test
public void test04() throws IOException {
//用类加载器读取配置文件
InputStream is = JULTest.class.getClassLoader().getResourceAsStream("logging.properties");
//获取LogManager
LogManager logManager = LogManager.getLogManager();
//读取配置文件
logManager.readConfiguration(is);
Logger log = Logger.getLogger("cn.shanguoyu.log.jul.JULTest");
log.info("info");
log.config("config");
log.fine("fine");
log.finer("finer");
log.finest("finest");
log.severe("severe");
log.warning("warning");
}
JUL配置文件详解
# RootLogger 顶级父元素指定的默认处理器为 ConsoleHandler
handlers= java.util.logging.ConsoleHandler
# RootLogger 顶级父元素默认的日志级别为: ALL
.level= ALL
#指定文件handler对象的 日志名格式 /logs/java0.log
java.util.logging.FileHandler.pattern = /logs/java%u.log
# 自定义Logger使用
cn.shanguoyu.handlers=java.util.logging.ConsoleHandler
cn.shanguoyu.level=CONFIG
#关闭默认配置
cn.shanguoyu.useParentHandlers=false
#日志追加还是覆盖 true是追加
java.util.logging.FileHandler.append=true
#指定日志文件内容大小
java.util.logging.FileHandler.limit = 50000
#指定日志文件数量
java.util.logging.FileHandler.count = 1
java.util.logging.FileHandler.maxLocks = 100
#指定文件handler的日志消息格式化对象
java.util.logging.FileHandler.formatter = java.util.logging.XMLFormatter
#指定handler对象的日志级别
java.util.logging.ConsoleHandler.level = ALL
#指定handler对象的格式化器对象为 SimpleFormatter
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
#指定handler对象的字符集
java.util.logging.ConsoleHandler.encoding = UTF-8