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

一、日志门面和日志框架

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

2. 日志框架技术: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: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 日志打印到文件

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:详细信息(多)");

    }

猜你喜欢

转载自blog.csdn.net/weixin_51725434/article/details/128607320