• JUL简介


    JUL简介

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

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

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

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

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

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

     

    代码实现

    1. package com.log;
    2. import org.junit.Test;
    3. import java.io.FileInputStream;
    4. import java.io.FileNotFoundException;
    5. import java.io.InputStream;
    6. import java.util.logging.*;
    7. public class JULTest {
    8. @Test
    9. public void test01() {
    10. Logger logger = Logger.getLogger("com.log");
    11. Logger logger2 = Logger.getLogger("com.log.JULTest");
    12. //logger 是 logger 的父,继承它的配置
    13. //RootLogger作为所有Logger的父Logger,getName为空
    14. // System.out.println("logger 名称: "+ logger.getName()+" 它的的父 :"+logger.getParent());
    15. //取消与父类关联
    16. //参数设置为false,我们打印日志的方式就不会按照父logger默认的方式去进行操作
    17. logger.setUseParentHandlers(false);
    18. // String name = "zs";
    19. // int age = 23;
    20. // logger.log(Level.INFO,"学生的姓名:{0},年龄:{1}",new Object[]{name,age});
    21. /*
    22. 日志的级别(通过源码查看,非常简单)
    23. SEVERE : 错误 --- 最高级的日志级别
    24. WARNING : 警告
    25. INFO : (默认级别)消息
    26. CONFIG : 配置
    27. FINE : 详细信息(少)
    28. FINER : 详细信息(中)
    29. FINEST : 详细信息 (多) --- 最低级的日志级别
    30. 每个级别对应一个数字
    31. SEVERE 1000
    32. WARNING 900
    33. ...
    34. FINEST 300
    35. 两个特殊的级别(通过控制数字来控制日志输出)
    36. 比如设置为500,则输出日志级别在500以上的日志
    37. OFF 可用来关闭日志记录 Integer.MAX_VALUE
    38. ALL 启用所有消息的日志记录 Integer.MIN_VALUE
    39. */
    40. //处理器Handler
    41. //在此我们使用的是控制台日志处理器,取得处理器对象
    42. ConsoleHandler handler = new ConsoleHandler();
    43. //创建日志格式化组件对象
    44. SimpleFormatter formatter = new SimpleFormatter();
    45. //在处理器中设置输出格式
    46. handler.setFormatter(formatter);
    47. //在记录器中添加处理器
    48. logger.addHandler(handler);
    49. //设置日志的打印级别
    50. //此处必须将日志记录器和处理器的级别进行统一的设置,才会达到日志显示相应级别的效果
    51. logger.setLevel(Level.FINE);
    52. handler.setLevel(Level.FINE);
    53. logger.severe("logger severe 信息");
    54. logger.warning("logger warning 信息");
    55. logger.config("logger config 信息");
    56. logger.fine("logger fine 信息");
    57. logger.finer("logger finer 信息");
    58. logger.finest("logger finest 信息");
    59. logger2.severe("logger2 severe 信息");
    60. logger2.warning("logger2 warning 信息");
    61. logger2.config("logger2 config 信息");
    62. logger2.fine("logger2 fine 信息");
    63. logger2.finer("logger2 finer 信息");
    64. logger2.finest("logger2 finest 信息");
    65. }
    66. }

    使用配置文件

    1. #RootLogger(根logger)使用的处理器
    2. handlers= java.util.logging.ConsoleHandler
    3. #RootLogger默认的日志级别
    4. .level= INFO
    5. #文件处理器属性设置
    6. #输出日志文件路径
    7. java.util.logging.FileHandler.pattern = %h/java%u.log
    8. #输出日志文件大小限制(50000字节)
    9. java.util.logging.FileHandler.limit = 50000
    10. #输出日志文件数量
    11. java.util.logging.FileHandler.count = 1
    12. #输出日志文件格式
    13. java.util.logging.FileHandler.formatter = java.util.logging.XMLFormatter
    14. #------------------------------
    15. #自定义Logger
    16. com.log.handlers = java.util.logging.FileHandler
    17. #自定义级别
    18. com.log.level = CONFIG
    19. #屏蔽父类
    20. com.log.UseParentHandlers = False
    21. #----------------------------------
    22. #控制器日志输出
    23. #控制器日志输出级别
    24. java.util.logging.ConsoleHandler.level = INFO
    25. #控制器日志输出格式
    26. java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
    27. #可将日志级别设置在某个包下
    28. #com.xyz.foo.level = SEVERE
    1. // 使用配置文件
    2. @Test
    3. public void test02() throws Exception {
    4. // 默认配置文件地址 jdk\jre\lib\logging.properties
    5. InputStream input = new FileInputStream("src/main/java/com/log/logging.properties");
    6. //取得日志管理器对象
    7. LogManager logManager = LogManager.getLogManager();
    8. //读取自定义的配置文件
    9. logManager.readConfiguration(input);
    10. Logger logger = Logger.getLogger("com.JULTest");
    11. logger.severe("severe信息");
    12. logger.warning("warning信息");
    13. logger.info("info信息");
    14. logger.config("config信息");
    15. logger.fine("fine信息");
    16. logger.finer("finer信息");
    17. logger.finest("finest信息");
    18. //文件日志处理器
    19. FileHandler handler = new FileHandler("src/main/java/com/log/myLogTest.log");
    20. SimpleFormatter formatter = new SimpleFormatter();
    21. handler.setFormatter(formatter);
    22. logger.addHandler(handler);
    23. //也可以同时在控制台和文件中进行打印
    24. ConsoleHandler handler2 = new ConsoleHandler();
    25. handler2.setFormatter(formatter);
    26. logger.addHandler(handler2); //可以在记录器中同时添加多个处理器
    27. logger.setLevel(Level.ALL);
    28. handler.setLevel(Level.ALL);
    29. handler2.setLevel(Level.CONFIG);
    30. logger.severe("severe信息");
    31. logger.warning("warning信息");
    32. logger.info("info信息");
    33. logger.config("config信息");
    34. logger.fine("fine信息");
    35. logger.finer("finer信息");
    36. logger.finest("finest信息");
    37. }

                JUL日志框架使用方式总结(原理解析)

                    1.初始化LogManager
                        LogManager加载logging.properties配置文件
                        添加Logger到LogManager
                    2.从单例的LogManager获取Logger
                    3.设置日志级别Level,在打印的过程中使用到了日志记录的LogRecord类
                    4.Filter作为过滤器提供了日志级别之外更细粒度的控制
                    5.Handler日志处理器,决定日志的输出位置,例如控制台、文件...
                    6.Formatter是用来格式化输出的

  • 相关阅读:
    批量删除docker中tag为<none>的镜像
    效果编辑器新版上线!3D渲染、加标注、设置动画,这次一个编辑器就够了
    智能化油田建设规划
    win10 修改MySQL8 wait_timeout 等超时和连接数配置
    用HTML+CSS+JS做一个漂亮简单的游戏网页——全屏游戏美术大赛作品(4个滚动页面)
    ARM pwn 入门 (1)
    Android~Compose脚手架和Toast
    常见排序算法及其使用场景
    MySQL的基本使用
    【JavaScript总结】双等与三等
  • 原文地址:https://blog.csdn.net/weixin_45729272/article/details/125512150