日志门面和日志框架(JUL)
一、日志门面和日志框架
日志门面技术:JCL,SLF4J主要是为了给Java日志访问提供一套标准、规范的API框架。
日志框架技术:JUL,log4j,log4j2,logback主要是为了有效的记录日志信息。
二、JUL日志框架
2.1 JUL简介
JUL 全称Java Util Logging,它是java原生的日志框架,使用时不需要另外导入第三方的类库,相对其他的框架使用方便,学习简单,主要是使用在小型应用中。
2.2 JUL组件
Logger:被称为记录器, 应用程序通过获取Logger对象,使用其API发布日志信息。Logger通常被认为是访问日志系统的入口程序。
Handler:日志处理器,每个Logger都会关联一个或者一组Handler,Logger会将日志交给关联的Handler去做处理,由Handler负责将日志做记录。Handler具体实现了日志的输出位置,比如可以输出到控制台或者文件中等等。
Filter:过滤器,根据需要定制哪些信息会被记录,哪些信息会被略过。
Formatter:格式化组件,它负责对日志中的数据和信息进行转换和格式化,所以它决定了我们输出日志的最终格式。
Level:日志的输出级别,每条日志消息都有一个关联的级别。我们根据输出级别的设置,用来展现最终呈现的日志信息。根据不同的需求,如设置不同的级别。
2.3 入门案例
public static void main(String[] args){
/**
* 日志程序入口:java.util.logging.Logger
* Logger对象的创建方式:由于构造函数是private,所以不能直接new对象,而是通过静态方法getLogger获取
* 取得对象的方法参数:需要引入当前类的全路径字符串
*/
Logger logger = Logger.getLogger("com.atredhorse.JulApplication");
/**
* 日志输出:两种方式
* 方式一:直接调用日志级别相关的方法,方法中传入日志输出信息
* 方式二:调用通用的log方法,然后在里面通过Level类型来定义日志的级别参数,以及搭配日志输出信息的参数
*/
logger.info("输出info信息-1");
logger.log(Level.INFO,"输出info信息-2");
String name= "张三";
Integer age = 23;
logger.log(Level.INFO,"学生姓名:{0},年龄为{1}",new Object[]{name,age});
}
2.4 自定义日志级别
public static void test02(){
//获取日志记录器
Logger logger = Logger.getLogger("com.atredhorse.JulApplication");
//将默认的日志打印方式关闭
//参数设置为false,打印日志的方式就不会按照父logger默认的方式进行操作
logger.setUseParentHandlers(false);
//控制台日志处理器
ConsoleHandler handler = new ConsoleHandler();
//创建日志格式化组件对象
SimpleFormatter formatter = new SimpleFormatter();
//在处理器中设置日志输出格式
handler.setFormatter(formatter);
//在记录器中添加处理器
logger.addHandler(handler);
//设置日志打印级别
//此处必须将日志记录器和处理器的级别进行统一的设置,才会达到日志显示相应级别的效果
logger.setLevel(Level.ALL);
handler.setLevel(Level.ALL);
//输出日志信息
logger.severe("severe:错误信息");
logger.warning("warning:警告信息");
logger.info("info:提示信息");
logger.config("config:配置信息");
logger.fine("fine:详细信息(少)");
logger.finer("fine:详细信息(中)");
logger.finest("fine:详细信息(多)");
}
运行结果:
一月 09, 2023 7
33 下午 com.atredhorse.JulApplication test02
严重: severe:错误信息
一月 09, 2023 733 下午 com.atredhorse.JulApplication test02
警告: warning:警告信息
一月 09, 2023 733 下午 com.atredhorse.JulApplication test02
信息: info:提示信息
一月 09, 2023 733 下午 com.atredhorse.JulApplication test02
配置: config:配置信息
一月 09, 2023 733 下午 com.atredhorse.JulApplication test02
详细: fine:详细信息(少)
一月 09, 2023 733 下午 com.atredhorse.JulApplication test02
较详细: fine:详细信息(中)
一月 09, 2023 733 下午 com.atredhorse.JulApplication test02
非常详细: fine:详细信息(多)
2.5 日志打印到文件
public static void test02() throws IOException {
//获取日志记录器
Logger logger = Logger.getLogger("com.atredhorse.JulApplication");
//将默认的日志打印方式关闭
//参数设置为false,打印日志的方式就不会按照父logger默认的方式进行操作
logger.setUseParentHandlers(false);
//控制台日志处理器
FileHandler handler = new FileHandler("F:\\project\\workspace\\springboot_base\\mybase.log");
//创建日志格式化组件对象
SimpleFormatter formatter = new SimpleFormatter();
//在处理器中设置日志输出格式
handler.setFormatter(formatter);
//在记录器中添加处理器
logger.addHandler(handler);
//设置日志打印级别
//此处必须将日志记录器和处理器的级别进行统一的设置,才会达到日志显示相应级别的效果
logger.setLevel(Level.ALL);
handler.setLevel(Level.ALL);
//输出日志信息
logger.severe("severe:错误信息");
logger.warning("warning:警告信息");
logger.info("info:提示信息");
logger.config("config:配置信息");
logger.fine("fine:详细信息(少)");
logger.finer("fine:详细信息(中)");
logger.finest("fine:详细信息(多)");
}
运行结果如下,此时控制台是没有日志的,日志文件内容如下:
2.6 添加多个处理器
用户使用 Logger 来进行日志的记录,使用 Handler 来进行日志的输出,Logger 可以持有多个处理器 Handler,添加了哪些 Handler 对象,就相当于根据所添加的 Handler 将日志输出到指定的位置上,例如控制台、文件中…
public static void test02() throws IOException {
//获取日志记录器
Logger logger = Logger.getLogger("com.atredhorse.JulApplication");
//将默认的日志打印方式关闭
//参数设置为false,打印日志的方式就不会按照父logger默认的方式进行操作
logger.setUseParentHandlers(false);
//控制台日志处理器
FileHandler handler = new FileHandler("F:\\project\\workspace\\springboot_base\\mybase.log");
//创建日志格式化组件对象
SimpleFormatter formatter = new SimpleFormatter();
//在处理器中设置日志输出格式
handler.setFormatter(formatter);
//在记录器中添加处理器
logger.addHandler(handler);
ConsoleHandler handler1 = new ConsoleHandler();
SimpleFormatter formatter1 = new SimpleFormatter();
logger.addHandler(handler1);
//设置日志打印级别
//此处必须将日志记录器和处理器的级别进行统一的设置,才会达到日志显示相应级别的效果
logger.setLevel(Level.ALL);
handler.setLevel(Level.ALL);
handler1.setLevel(Level.WARNING);
//输出日志信息
logger.severe("severe:错误信息");
logger.warning("warning:警告信息");
logger.info("info:提示信息");
logger.config("config:配置信息");
logger.fine("fine:详细信息(少)");
logger.finer("fine:详细信息(中)");
logger.finest("fine:详细信息(多)");
}
还没有评论,来说两句吧...