前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >java日志框架(一)JUL 学习 ,这个是什么,他在代码中如何使用,一篇文章讲清楚

java日志框架(一)JUL 学习 ,这个是什么,他在代码中如何使用,一篇文章讲清楚

作者头像
一写代码就开心
发布2021-07-13 16:13:54
9620
发布2021-07-13 16:13:54
举报
文章被收录于专栏:java和python

JUL 是什么

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

在这里插入图片描述
在这里插入图片描述

也就是主要就是学习那个包

JUL组件介绍

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

代码中如何使用(控制台输出)

1 首先创建一个maven项目

在这里插入图片描述
在这里插入图片描述

2 写对应代码

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

第三个方式:

代码语言:javascript
复制
    // 通过占位符 方式输出变量值
        String name = "jing";
        Integer age = 13;
        logger.log(Level.INFO,"用户信息:{0},{1}",new Object[]{name,age});

整体代码:

代码语言:javascript
复制
package com.controller;

import org.junit.Test;

import java.util.logging.Logger;
public class JULTest {
    @Test
    public void test(){
        //     // 1.创建日志记录器对象,不是直接new,因为这个类受保护,所以只能使用静态方法进行创建对象
        Logger logger = Logger.getLogger("com.controller.JULTest");
        // 2.日志记录输出
        logger.info("dddddd");

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


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

    }
}
在这里插入图片描述
在这里插入图片描述

日志级别

在这里插入图片描述
在这里插入图片描述

每个级别看源码,都有数值,从大到小排列

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

也就是如果不配置,默认就只能打印3个级别的日志信息

在这里插入图片描述
在这里插入图片描述

自定义输出级别

Java默认的只能输出3个级别,并且默认的还是输出到控制台。我们现在想要输出其他多个级别,并且输出到文件里面。那么如何做?

只能自定义输出级别了。自定义的时候,先要关闭默认的。

代码语言:javascript
复制
        // 1.获取日志记录器对象
        Logger logger = Logger.getLogger("com.controller.JULTest");
        // 关闭系统默认配置,之后就可以自己配置了
        logger.setUseParentHandlers(false);
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
代码语言:javascript
复制
 // 自定义日志级别
    @Test
    public void testLogConfig()throws Exception{
// 1.获取日志记录器对象
        Logger logger = Logger.getLogger("com.controller.JULTest");
// 关闭系统默认配置
        logger.setUseParentHandlers(false);
// 自定义配置日志级别
        // 创建ConsolHhandler 控制台输出
        ConsoleHandler consoleHandler = new ConsoleHandler();
        // 创建简单格式转换对象
        SimpleFormatter simpleFormatter = new SimpleFormatter();
        // 进行关联
        consoleHandler.setFormatter(simpleFormatter);
        logger.addHandler(consoleHandler);
// 配置日志具体级别
        logger.setLevel(Level.ALL);
        consoleHandler.setLevel(Level.ALL);

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

    }

输出日志到文件(磁盘文件中)

在这里插入图片描述
在这里插入图片描述
代码语言:javascript
复制
 // 自定义日志级别
    @Test
    public void testLogConfig()throws Exception{
        // 1.获取日志记录器对象
        Logger logger = Logger.getLogger("com.controller.JULTest");


        // 关闭系统默认配置
        logger.setUseParentHandlers(false);
        // 自定义配置日志级别



// 创建ConsolHhandler 控制台输出
        ConsoleHandler consoleHandler = new ConsoleHandler();
        // 创建简单格式转换对象
        SimpleFormatter simpleFormatter = new SimpleFormatter();
        // 进行关联
        consoleHandler.setFormatter(simpleFormatter);
        logger.addHandler(consoleHandler);
        // 配置日志具体级别
        logger.setLevel(Level.ALL);
        consoleHandler.setLevel(Level.ALL);


// 场景FileHandler  文件输出
        FileHandler fileHandler = new FileHandler("/logs/jul.log");
        // 进行关联
        fileHandler.setFormatter(simpleFormatter);
        logger.addHandler(fileHandler);


// 2.日志记录输出      以下级别从大到小
        logger.severe("severe");
        logger.warning("warning");
        logger.info("info"); // 默认日志输出级别
        logger.config("config");
        logger.fine("fine");
        logger.finer("finer");
        logger.finest("finest");

    }

以上创建了两个Handler,一个是控制台的,一个是文件的,把这个Handler设置到日志记录器对象里面。

以后的日志不仅仅是控制台输出了,而且还可以输出到文件

运行上面代码之后:

在这里插入图片描述
在这里插入图片描述

还有文件:

在这里插入图片描述
在这里插入图片描述

这个里面的日志和控制台的一模一样

日志对象父子关系

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
代码语言:javascript
复制
    // Logger对象父子关系
    @Test
    public void testLogParent()throws Exception{

        Logger logger1 = Logger.getLogger("com.controller.JULTest");
        Logger logger2 = Logger.getLogger("com.controller");

        // 测试
        System.out.println(logger1.getParent() == logger2);
        // 所有日志记录器的顶级父元素 LogManager$RootLogger,name 为  ""
        System.out.println("logger2 Parent:"+logger2.getParent() + ",name:" + logger2.getParent().getName());

        // 关闭默认配置
        logger2.setUseParentHandlers(false);

        // 设置logger2日志级别
        // 自定义配置日志级别
        // 创建ConsolHhandler 控制台输出
        ConsoleHandler consoleHandler = new ConsoleHandler();

        // 创建简单格式转换对象
        SimpleFormatter simpleFormatter = new SimpleFormatter();

        // 进行关联
        consoleHandler.setFormatter(simpleFormatter);
        logger2.addHandler(consoleHandler);


        // 配置日志具体级别
        logger2.setLevel(Level.ALL);
        consoleHandler.setLevel(Level.ALL);

        logger1.severe("severe");
        logger1.warning("warning");
        logger1.info("info");
        logger1.config("config");
        logger1.fine("fine");
        logger1.finer("finer");
        logger1.finest("finest");
    }

配置文件

在这里插入图片描述
在这里插入图片描述

我们可以找到默认的配置文件,并且把配置文件拿出来,进行分析

在这里插入图片描述
在这里插入图片描述

以上就是默认的,进行解释这个默认的配置:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
代码语言:javascript
复制
# RootLogger 顶级父元素指定的默认处理器为:ConsoleHandler
handlers= java.util.logging.FileHandler

# RootLogger 顶级父元素默认的日志级别为:ALL
.level= ALL




# 向日志文件输出的 handler 对象
# 指定日志文件路径 /logs/java0.log
java.util.logging.FileHandler.pattern = /logs/java%u.log
# 指定日志文件内容大小
java.util.logging.FileHandler.limit = 50000
# 指定日志文件数量
java.util.logging.FileHandler.count = 1
# 指定 handler 对象日志消息格式对象
java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter
# 指定以追加方式添加日志内容
java.util.logging.FileHandler.append = true


# 向控制台输出的 handler 对象
# 指定 handler 对象的日志级别
java.util.logging.ConsoleHandler.level = ALL
# 指定 handler 对象的日志消息格式对象
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
# 指定 handler 对象的字符集
java.util.logging.ConsoleHandler.encoding = UTF-8

# 指定日志消息格式
java.util.logging.SimpleFormatter.format = %4$s: %5$s [%1$tc]%n

我们还可以在配置自己的处理器,在配置文件里面把默认的关掉。

代码语言:javascript
复制
#     自定义 Logger 使用
com.handlers = java.util.logging.ConsoleHandler
com.level = CONFIG

#     关闭默认配置
com.itheima.useParentHanlders = false

写了以上的配置之后,之后使用这个配置文件,那么就会使用我们自定义的东西。

代码语言:javascript
复制
 // 加载自定义配置文件
    @Test
    public void testLogProperties()throws Exception{

        // 读取配置文件,通过类加载器
        InputStream ins = JULTest.class.getClassLoader().getResourceAsStream("logging.properties");
        // 创建LogManager
        LogManager logManager = LogManager.getLogManager();
        // 通过LogManager加载配置文件
        logManager.readConfiguration(ins);

        // 创建日志记录器
        Logger logger = Logger.getLogger("com");

        logger.severe("severe");
        logger.warning("warning");
        logger.info("info");
        logger.config("config");
        logger.fine("fine");
        logger.finer("finer");
        logger.finest("finest");


        Logger logger2 = Logger.getLogger("test");

        logger2.severe("severe test");
        logger2.warning("warning test");
        logger2.info("info test");
        logger2.config("config test");
        logger2.fine("fine test");
        logger2.finer("finer test");
        logger2.finest("finest test");

    }

使用方法总结

在这里插入图片描述
在这里插入图片描述
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/07/10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • JUL 是什么
  • JUL组件介绍
  • 代码中如何使用(控制台输出)
  • 日志级别
  • 自定义输出级别
  • 输出日志到文件(磁盘文件中)
  • 日志对象父子关系
  • 配置文件
  • 使用方法总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档