JUL简介

JUL简介

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

JUL简介_第1张图片

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

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

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

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

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

 

代码实现

package com.log;

import org.junit.Test;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.util.logging.*;

public class JULTest {

    @Test
    public void test01() {

        Logger logger = Logger.getLogger("com.log");
        Logger logger2 = Logger.getLogger("com.log.JULTest");
        //logger 是 logger 的父,继承它的配置
        //RootLogger作为所有Logger的父Logger,getName为空
//        System.out.println("logger 名称: "+ logger.getName()+" 它的的父 :"+logger.getParent());

        //取消与父类关联
        //参数设置为false,我们打印日志的方式就不会按照父logger默认的方式去进行操作
        logger.setUseParentHandlers(false);


//        String name = "zs";
//        int age = 23;
//        logger.log(Level.INFO,"学生的姓名:{0},年龄:{1}",new Object[]{name,age});

/*
        日志的级别(通过源码查看,非常简单)
        SEVERE : 错误 --- 最高级的日志级别
        WARNING : 警告
        INFO : (默认级别)消息
        CONFIG : 配置
        FINE : 详细信息(少)
        FINER : 详细信息(中)
        FINEST : 详细信息 (多) --- 最低级的日志级别

        每个级别对应一个数字
        SEVERE 1000
        WARNING 900
        ...
        FINEST 300

        两个特殊的级别(通过控制数字来控制日志输出)
        比如设置为500,则输出日志级别在500以上的日志
        OFF 可用来关闭日志记录      Integer.MAX_VALUE
        ALL 启用所有消息的日志记录   Integer.MIN_VALUE

*/


        //处理器Handler
        //在此我们使用的是控制台日志处理器,取得处理器对象
        ConsoleHandler handler = new ConsoleHandler();
        //创建日志格式化组件对象
        SimpleFormatter formatter = new SimpleFormatter();

        //在处理器中设置输出格式
        handler.setFormatter(formatter);
        //在记录器中添加处理器
        logger.addHandler(handler);
        //设置日志的打印级别
        //此处必须将日志记录器和处理器的级别进行统一的设置,才会达到日志显示相应级别的效果
        logger.setLevel(Level.FINE);
        handler.setLevel(Level.FINE);


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


        logger2.severe("logger2 severe 信息");
        logger2.warning("logger2 warning 信息");
        logger2.config("logger2 config 信息");
        logger2.fine("logger2 fine 信息");
        logger2.finer("logger2 finer 信息");
        logger2.finest("logger2 finest 信息");
    }

}

使用配置文件

#RootLogger(根logger)使用的处理器
handlers= java.util.logging.ConsoleHandler

#RootLogger默认的日志级别
.level= INFO

#文件处理器属性设置
#输出日志文件路径
java.util.logging.FileHandler.pattern = %h/java%u.log
#输出日志文件大小限制(50000字节)
java.util.logging.FileHandler.limit = 50000
#输出日志文件数量
java.util.logging.FileHandler.count = 1
#输出日志文件格式
java.util.logging.FileHandler.formatter = java.util.logging.XMLFormatter

#------------------------------
#自定义Logger
com.log.handlers = java.util.logging.FileHandler
#自定义级别
com.log.level = CONFIG
#屏蔽父类
com.log.UseParentHandlers = False
#----------------------------------

#控制器日志输出
#控制器日志输出级别
java.util.logging.ConsoleHandler.level = INFO
#控制器日志输出格式
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter

#可将日志级别设置在某个包下
#com.xyz.foo.level = SEVERE

    //    使用配置文件
    @Test
    public void test02() throws Exception {
//        默认配置文件地址  jdk\jre\lib\logging.properties


        InputStream input = new FileInputStream("src/main/java/com/log/logging.properties");

        //取得日志管理器对象
        LogManager logManager = LogManager.getLogManager();

        //读取自定义的配置文件
        logManager.readConfiguration(input);

        Logger logger = Logger.getLogger("com.JULTest");

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

        //文件日志处理器
        FileHandler handler = new FileHandler("src/main/java/com/log/myLogTest.log");
        SimpleFormatter formatter = new SimpleFormatter();
        handler.setFormatter(formatter);
        logger.addHandler(handler);

        //也可以同时在控制台和文件中进行打印
        ConsoleHandler handler2 = new ConsoleHandler();
        handler2.setFormatter(formatter);
        logger.addHandler(handler2); //可以在记录器中同时添加多个处理器

        logger.setLevel(Level.ALL);
        handler.setLevel(Level.ALL);
        handler2.setLevel(Level.CONFIG);

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



    }

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

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

你可能感兴趣的:(Log,log)