“JUL”的版本间的差异

来自姬鸿昌的知识库
跳到导航 跳到搜索
第131行: 第131行:
 
</syntaxhighlight>
 
</syntaxhighlight>
 
运行程序发现控制台没有日志记录输出
 
运行程序发现控制台没有日志记录输出
 +
 +
 +
 +
  
 
==== 测试默认日志级别 ====
 
==== 测试默认日志级别 ====

2023年2月21日 (二) 12:41的版本

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

JUL 入门

架构介绍

JUL架构图示.png
  • Loggers:被称为记录器,应用程序通过获取 Logger 对象,调用其 API 来发布日志消息。Logger 通常是应用程序访问日志系统的入口程序。
  • Appenders:也被称为 Handlers,每个 Logger 都会关联一组 Handlers,Logger 会将日志交给关联 Handlers 处理,由 Handlers 负责将日志做记录。Handlers 在此是一个抽象,其具体的实现决定了日志记录的位置可以是控制台、文件、网络上的其他日志服务或操作系统日志等。
  • Layouts:也被称为 Formatters,它负责对日志事件中的数据进行转换和格式化。Layouts 决定了数据在一条日志记录中的最终形式。
  • Level:每条日志消息都有一个关联的日志级别。该级别粗略指导了日志消息的重要性和紧迫,可以将 Level 和 Loggers,Appenders 做关联以便于我们过滤消息。
  • Filters:过滤器,根据需要定制哪些信息会被记录,哪些信息会被放过。

总结一下就是:

用户使用 Logger 来进行日志记录,Logger 持有若干个 Handler,日志的输出操作是由 Handler 完成的。

Handler 在输出日志前,会经过 Filter 的过滤,判断哪些日志级别过滤放行、哪些拦截,

Handler 会将日志内容输出到指定位置(日志文件、控制台等)。

Handler 在输出日志时会使用 Layout,对输出内容进行排版。



入门案例

package io.github.jihch.log;

import org.junit.Test;

import java.util.logging.Level;
import java.util.logging.Logger;

public class JULTest {

    @Test
    public void testQuick() throws Exception {

        //1、创建日志记录器对象
        Logger logger = Logger.getLogger("io.github.jihch.log.JULTest");

        //2、日志记录输出
        logger.info("hello jul");

        logger.log(Level.INFO, "info msg");

        String name = "jack";

        Integer age = 18;

        logger.log(Level.INFO, "用户信息:{0},{1}", new Object[]{name, age});

    }

}
二月 21, 2023 8:33:03 下午 io.github.jihch.JULTest testQuick
信息: hello jul
二月 21, 2023 8:33:03 下午 io.github.jihch.JULTest testQuick
信息: info msg
二月 21, 2023 8:33:03 下午 io.github.jihch.JULTest testQuick
信息: 用户信息:jack,18



日志级别

Integer.MAX_VALUE OFF 关闭日志
1000 SEVERE 十分严重
900 WARNING 警告
800 INFO 信息
700 CONFIG 配置信息
500 FINE 跟踪信息
400 FINER 跟踪信息
300 FINEST 跟踪信息
Integer.MIN_VALUE ALL 记录所有日志

可以为每个 logger 对象设置一个日志级别,每个级别都对应一个 int 值,大于等于这个值的日志就会被记录,小于这个值的日志就不会被记录

比如在一个类中,JULTest 中设置 logger 对象的日志级别是 OFF:

    public void testQuick() throws Exception {

        //1、创建日志记录器对象
        Logger logger = Logger.getLogger("io.github.jihch.JULTest");

        logger.setLevel(Level.OFF);

        //2、日志记录输出
        logger.info("hello jul");

        // 通用方法进行日志记录
        logger.log(Level.INFO, "info msg");


        // 通过占位符 方式输出变量值
        String name = "jack";
        Integer age = 18;
        logger.log(Level.INFO, "用户信息:{0},{1}", new Object[]{name, age});

    }

运行程序发现控制台没有日志记录输出



测试默认日志级别

    // 日志级别
    @Test
    public void testLogLevel() throws Exception {
        //1、获取日志记录器对象
        Logger logger = Logger.getLogger("io.github.jihch.JULTest");

        //2、日志记录输出
        logger.severe("severe");
        logger.warning("warning");
        logger.info("info");
        logger.config("config");
        logger.fine("fine");
        logger.finer("finer");
        logger.finest("finest");

    }
二月 21, 2023 8:40:42 下午 io.github.jihch.JULTest testLogLevel
严重: severe
二月 21, 2023 8:40:42 下午 io.github.jihch.JULTest testLogLevel
警告: warning
二月 21, 2023 8:40:42 下午 io.github.jihch.JULTest testLogLevel
信息: info


参考

https://www.bilibili.com/video/BV1iJ411H74S/?p=4