当前位置:网站首页>JUL简介
JUL简介
2022-06-30 09:36:00 【xx985】
JUL简介
JUL全程 Java Util Logging,它是java原生的日志框架,使用时不需要另外引用第三方的类库,相对其他的框架使用方便,学习简单,主要是使用在小型应用中。
Logger:被称为记录器,应用程序通过获取Logger对象,抵用其API来发布日志信息。Logger通常被认为是访问日志系统的入口程序。
Handler:处理器,每个Logger都会关联一个或者是一组Handler,Logger会将日志交给关联的Handler去做处理,由Handler负责将日志做记录。Handler具体实现了日志的输出位置,比如可以输出到控制台或者是文件中等等。
Filter:过滤器,根据需要定制哪些信息会被记录,哪些信息会被略过。
Formatter:格式化组件,它负责对日志中的数据和信息进行转换和格式化,所以它决定了我们输出日志最终的形式。
Level:日志的输出级别,每条日志消息都有一个关联的级别。我们根据输出级别的设置,用来展现最终所呈现的日志信息。根据不同的需求,去设置不同的级别。
代码实现
package com.log;
import org.junit.Test;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.util.logging.*;
public class JULTest {
@Test
public void test01() {
Logger logger = Logger.getLogger("com.log");
Logger logger2 = Logger.getLogger("com.log.JULTest");
//logger 是 logger 的父,继承它的配置
//RootLogger作为所有Logger的父Logger,getName为空
// System.out.println("logger 名称: "+ logger.getName()+" 它的的父 :"+logger.getParent());
//取消与父类关联
//参数设置为false,我们打印日志的方式就不会按照父logger默认的方式去进行操作
logger.setUseParentHandlers(false);
// String name = "zs";
// int age = 23;
// logger.log(Level.INFO,"学生的姓名:{0},年龄:{1}",new Object[]{name,age});
/*
日志的级别(通过源码查看,非常简单)
SEVERE : 错误 --- 最高级的日志级别
WARNING : 警告
INFO : (默认级别)消息
CONFIG : 配置
FINE : 详细信息(少)
FINER : 详细信息(中)
FINEST : 详细信息 (多) --- 最低级的日志级别
每个级别对应一个数字
SEVERE 1000
WARNING 900
...
FINEST 300
两个特殊的级别(通过控制数字来控制日志输出)
比如设置为500,则输出日志级别在500以上的日志
OFF 可用来关闭日志记录 Integer.MAX_VALUE
ALL 启用所有消息的日志记录 Integer.MIN_VALUE
*/
//处理器Handler
//在此我们使用的是控制台日志处理器,取得处理器对象
ConsoleHandler handler = new ConsoleHandler();
//创建日志格式化组件对象
SimpleFormatter formatter = new SimpleFormatter();
//在处理器中设置输出格式
handler.setFormatter(formatter);
//在记录器中添加处理器
logger.addHandler(handler);
//设置日志的打印级别
//此处必须将日志记录器和处理器的级别进行统一的设置,才会达到日志显示相应级别的效果
logger.setLevel(Level.FINE);
handler.setLevel(Level.FINE);
logger.severe("logger severe 信息");
logger.warning("logger warning 信息");
logger.config("logger config 信息");
logger.fine("logger fine 信息");
logger.finer("logger finer 信息");
logger.finest("logger finest 信息");
logger2.severe("logger2 severe 信息");
logger2.warning("logger2 warning 信息");
logger2.config("logger2 config 信息");
logger2.fine("logger2 fine 信息");
logger2.finer("logger2 finer 信息");
logger2.finest("logger2 finest 信息");
}
}
使用配置文件
#RootLogger(根logger)使用的处理器
handlers= java.util.logging.ConsoleHandler
#RootLogger默认的日志级别
.level= INFO
#文件处理器属性设置
#输出日志文件路径
java.util.logging.FileHandler.pattern = %h/java%u.log
#输出日志文件大小限制(50000字节)
java.util.logging.FileHandler.limit = 50000
#输出日志文件数量
java.util.logging.FileHandler.count = 1
#输出日志文件格式
java.util.logging.FileHandler.formatter = java.util.logging.XMLFormatter
#------------------------------
#自定义Logger
com.log.handlers = java.util.logging.FileHandler
#自定义级别
com.log.level = CONFIG
#屏蔽父类
com.log.UseParentHandlers = False
#----------------------------------
#控制器日志输出
#控制器日志输出级别
java.util.logging.ConsoleHandler.level = INFO
#控制器日志输出格式
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
#可将日志级别设置在某个包下
#com.xyz.foo.level = SEVERE
// 使用配置文件
@Test
public void test02() throws Exception {
// 默认配置文件地址 jdk\jre\lib\logging.properties
InputStream input = new FileInputStream("src/main/java/com/log/logging.properties");
//取得日志管理器对象
LogManager logManager = LogManager.getLogManager();
//读取自定义的配置文件
logManager.readConfiguration(input);
Logger logger = Logger.getLogger("com.JULTest");
logger.severe("severe信息");
logger.warning("warning信息");
logger.info("info信息");
logger.config("config信息");
logger.fine("fine信息");
logger.finer("finer信息");
logger.finest("finest信息");
//文件日志处理器
FileHandler handler = new FileHandler("src/main/java/com/log/myLogTest.log");
SimpleFormatter formatter = new SimpleFormatter();
handler.setFormatter(formatter);
logger.addHandler(handler);
//也可以同时在控制台和文件中进行打印
ConsoleHandler handler2 = new ConsoleHandler();
handler2.setFormatter(formatter);
logger.addHandler(handler2); //可以在记录器中同时添加多个处理器
logger.setLevel(Level.ALL);
handler.setLevel(Level.ALL);
handler2.setLevel(Level.CONFIG);
logger.severe("severe信息");
logger.warning("warning信息");
logger.info("info信息");
logger.config("config信息");
logger.fine("fine信息");
logger.finer("finer信息");
logger.finest("finest信息");
}
JUL日志框架使用方式总结(原理解析)
1.初始化LogManager
LogManager加载logging.properties配置文件
添加Logger到LogManager
2.从单例的LogManager获取Logger
3.设置日志级别Level,在打印的过程中使用到了日志记录的LogRecord类
4.Filter作为过滤器提供了日志级别之外更细粒度的控制
5.Handler日志处理器,决定日志的输出位置,例如控制台、文件...
6.Formatter是用来格式化输出的
边栏推荐
- 【新书推荐】MongoDB Performance Tuning
- Small program development journey
- Design of mfc+mysql document data management system based on VS2010
- Installing Oracle database process in windows2007 on VM
- 机器学习笔记 九:预测模型优化(防止欠拟合和过拟合问题发生)
- MCU firmware packaging Script Software
- 银河麒麟server-V10配置镜像源
- Flume learning 1
- Redis docker master-slave mode and sentinel
- The present situation and challenge of the infrastructure of Yiwen parsing database
猜你喜欢
The present situation and challenge of the infrastructure of Yiwen parsing database
Valuenotifier and valuelistenablebuilder in fluent
布隆过滤器
Idea shortcut key settings
【AGC】构建服务3-认证服务示例
Cb/s Architecture - Implementation Based on cef3+mfc
Flume learning II - Cases
How to build a private cloud and create a hybrid cloud ecosystem?
仿照微信Oauth2.0接入方案
NTP of Prometheus monitoring_ exporter
随机推荐
目标检测yolov5开源项目调试
1, 基本配置
MySQL directory
NER – Named Entity Recognition Summary
1. Basic configuration
Redis + MySQL implements the like function
小程序开发踩坑之旅
[ubuntu-mysql 8 installation and master-slave replication]
ABAP-时间函数
Enterprise data center "cloud" transformation solution
Notes on masking and padding in tensorflow keras
Principle and implementation of small program hand-held bullet screen (uni APP)
NTP of Prometheus monitoring_ exporter
八大排序(一)
Redis docker master-slave mode and sentinel
2021-07-26
布隆过滤器
Critical applications and hyper converged infrastructure: the time has come
prometheus 监控之 ntp_exporter
Small program development journey