日志门面和日志框架(JUL)

你的名字 2023-10-07 22:37 132阅读 0赞

一、日志门面和日志框架

  1. 日志门面技术:JCL,SLF4J主要是为了给Java日志访问提供一套标准、规范的API框架。

  2. 日志框架技术:JUL,log4j,log4j2,logback主要是为了有效的记录日志信息。

二、JUL日志框架

2.1 JUL简介

JUL 全称Java Util Logging,它是java原生的日志框架,使用时不需要另外导入第三方的类库,相对其他的框架使用方便,学习简单,主要是使用在小型应用中。

2.2 JUL组件

3117927966684d00a79017d39db6ed10.png

Logger:被称为记录器, 应用程序通过获取Logger对象,使用其API发布日志信息。Logger通常被认为是访问日志系统的入口程序。

Handler:日志处理器,每个Logger都会关联一个或者一组Handler,Logger会将日志交给关联的Handler去做处理,由Handler负责将日志做记录。Handler具体实现了日志的输出位置,比如可以输出到控制台或者文件中等等。

Filter:过滤器,根据需要定制哪些信息会被记录,哪些信息会被略过。

Formatter:格式化组件,它负责对日志中的数据和信息进行转换和格式化,所以它决定了我们输出日志的最终格式。

Level:日志的输出级别,每条日志消息都有一个关联的级别。我们根据输出级别的设置,用来展现最终呈现的日志信息。根据不同的需求,如设置不同的级别。

2.3 入门案例

  1. public static void main(String[] args){
  2. /**
  3. * 日志程序入口:java.util.logging.Logger
  4. * Logger对象的创建方式:由于构造函数是private,所以不能直接new对象,而是通过静态方法getLogger获取
  5. * 取得对象的方法参数:需要引入当前类的全路径字符串
  6. */
  7. Logger logger = Logger.getLogger("com.atredhorse.JulApplication");
  8. /**
  9. * 日志输出:两种方式
  10. * 方式一:直接调用日志级别相关的方法,方法中传入日志输出信息
  11. * 方式二:调用通用的log方法,然后在里面通过Level类型来定义日志的级别参数,以及搭配日志输出信息的参数
  12. */
  13. logger.info("输出info信息-1");
  14. logger.log(Level.INFO,"输出info信息-2");
  15. String name= "张三";
  16. Integer age = 23;
  17. logger.log(Level.INFO,"学生姓名:{0},年龄为{1}",new Object[]{name,age});
  18. }

2.4 自定义日志级别

  1. public static void test02(){
  2. //获取日志记录器
  3. Logger logger = Logger.getLogger("com.atredhorse.JulApplication");
  4. //将默认的日志打印方式关闭
  5. //参数设置为false,打印日志的方式就不会按照父logger默认的方式进行操作
  6. logger.setUseParentHandlers(false);
  7. //控制台日志处理器
  8. ConsoleHandler handler = new ConsoleHandler();
  9. //创建日志格式化组件对象
  10. SimpleFormatter formatter = new SimpleFormatter();
  11. //在处理器中设置日志输出格式
  12. handler.setFormatter(formatter);
  13. //在记录器中添加处理器
  14. logger.addHandler(handler);
  15. //设置日志打印级别
  16. //此处必须将日志记录器和处理器的级别进行统一的设置,才会达到日志显示相应级别的效果
  17. logger.setLevel(Level.ALL);
  18. handler.setLevel(Level.ALL);
  19. //输出日志信息
  20. logger.severe("severe:错误信息");
  21. logger.warning("warning:警告信息");
  22. logger.info("info:提示信息");
  23. logger.config("config:配置信息");
  24. logger.fine("fine:详细信息(少)");
  25. logger.finer("fine:详细信息(中)");
  26. logger.finest("fine:详细信息(多)");
  27. }

运行结果:

一月 09, 2023 7:36:33 下午 com.atredhorse.JulApplication test02
严重: severe:错误信息
一月 09, 2023 7:36:33 下午 com.atredhorse.JulApplication test02
警告: warning:警告信息
一月 09, 2023 7:36:33 下午 com.atredhorse.JulApplication test02
信息: info:提示信息
一月 09, 2023 7:36:33 下午 com.atredhorse.JulApplication test02
配置: config:配置信息
一月 09, 2023 7:36:33 下午 com.atredhorse.JulApplication test02
详细: fine:详细信息(少)
一月 09, 2023 7:36:33 下午 com.atredhorse.JulApplication test02
较详细: fine:详细信息(中)
一月 09, 2023 7:36:33 下午 com.atredhorse.JulApplication test02
非常详细: fine:详细信息(多)

2.5 日志打印到文件

  1. public static void test02() throws IOException {
  2. //获取日志记录器
  3. Logger logger = Logger.getLogger("com.atredhorse.JulApplication");
  4. //将默认的日志打印方式关闭
  5. //参数设置为false,打印日志的方式就不会按照父logger默认的方式进行操作
  6. logger.setUseParentHandlers(false);
  7. //控制台日志处理器
  8. FileHandler handler = new FileHandler("F:\\project\\workspace\\springboot_base\\mybase.log");
  9. //创建日志格式化组件对象
  10. SimpleFormatter formatter = new SimpleFormatter();
  11. //在处理器中设置日志输出格式
  12. handler.setFormatter(formatter);
  13. //在记录器中添加处理器
  14. logger.addHandler(handler);
  15. //设置日志打印级别
  16. //此处必须将日志记录器和处理器的级别进行统一的设置,才会达到日志显示相应级别的效果
  17. logger.setLevel(Level.ALL);
  18. handler.setLevel(Level.ALL);
  19. //输出日志信息
  20. logger.severe("severe:错误信息");
  21. logger.warning("warning:警告信息");
  22. logger.info("info:提示信息");
  23. logger.config("config:配置信息");
  24. logger.fine("fine:详细信息(少)");
  25. logger.finer("fine:详细信息(中)");
  26. logger.finest("fine:详细信息(多)");
  27. }

运行结果如下,此时控制台是没有日志的,日志文件内容如下:

d91959538f0543beba37eeb15967a4f9.png

2.6 添加多个处理器

用户使用 Logger 来进行日志的记录,使用 Handler 来进行日志的输出,Logger 可以持有多个处理器 Handler,添加了哪些 Handler 对象,就相当于根据所添加的 Handler 将日志输出到指定的位置上,例如控制台、文件中…

  1. public static void test02() throws IOException {
  2. //获取日志记录器
  3. Logger logger = Logger.getLogger("com.atredhorse.JulApplication");
  4. //将默认的日志打印方式关闭
  5. //参数设置为false,打印日志的方式就不会按照父logger默认的方式进行操作
  6. logger.setUseParentHandlers(false);
  7. //控制台日志处理器
  8. FileHandler handler = new FileHandler("F:\\project\\workspace\\springboot_base\\mybase.log");
  9. //创建日志格式化组件对象
  10. SimpleFormatter formatter = new SimpleFormatter();
  11. //在处理器中设置日志输出格式
  12. handler.setFormatter(formatter);
  13. //在记录器中添加处理器
  14. logger.addHandler(handler);
  15. ConsoleHandler handler1 = new ConsoleHandler();
  16. SimpleFormatter formatter1 = new SimpleFormatter();
  17. logger.addHandler(handler1);
  18. //设置日志打印级别
  19. //此处必须将日志记录器和处理器的级别进行统一的设置,才会达到日志显示相应级别的效果
  20. logger.setLevel(Level.ALL);
  21. handler.setLevel(Level.ALL);
  22. handler1.setLevel(Level.WARNING);
  23. //输出日志信息
  24. logger.severe("severe:错误信息");
  25. logger.warning("warning:警告信息");
  26. logger.info("info:提示信息");
  27. logger.config("config:配置信息");
  28. logger.fine("fine:详细信息(少)");
  29. logger.finer("fine:详细信息(中)");
  30. logger.finest("fine:详细信息(多)");
  31. }

发表评论

表情:
评论列表 (有 0 条评论,132人围观)

还没有评论,来说两句吧...

相关阅读

    相关 日志框架(一)JUL

    一、日志的概念 1. 日志文件 日志文件是用于记录系统操作事件的文件集合,可分为事件日志和消息日志。具有处理历史数据、诊断问题的追踪以及理解系统的活动等重要作用。