JUL 是什么
JUL全称Java util Logging是java原生的日志框架,使用时不需要另外引用第三方类库,相对其他日志框
架使用方便,学习简单,能够在小型应用中灵活使用。
也就是主要就是学习那个包
JUL组件介绍
代码中如何使用(控制台输出)
1 首先创建一个maven项目
2 写对应代码
第三个方式:
// 通过占位符 方式输出变量值
String name = "jing";
Integer age = 13;
logger.log(Level.INFO,"用户信息:{0},{1}",new Object[]{
name,age});
整体代码:
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个级别,并且默认的还是输出到控制台。我们现在想要输出其他多个级别,并且输出到文件里面。那么如何做?
只能自定义输出级别了。自定义的时候,先要关闭默认的。
// 1.获取日志记录器对象
Logger logger = Logger.getLogger("com.controller.JULTest");
// 关闭系统默认配置,之后就可以自己配置了
logger.setUseParentHandlers(false);
// 自定义日志级别
@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");
}
输出日志到文件(磁盘文件中)
// 自定义日志级别
@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设置到日志记录器对象里面。
以后的日志不仅仅是控制台输出了,而且还可以输出到文件
运行上面代码之后:
还有文件:
这个里面的日志和控制台的一模一样
日志对象父子关系
// 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");
}
配置文件
我们可以找到默认的配置文件,并且把配置文件拿出来,进行分析
以上就是默认的,进行解释这个默认的配置:
# 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
我们还可以在配置自己的处理器,在配置文件里面把默认的关掉。
# 自定义 Logger 使用
com.handlers = java.util.logging.ConsoleHandler
com.level = CONFIG
# 关闭默认配置
com.itheima.useParentHanlders = false
写了以上的配置之后,之后使用这个配置文件,那么就会使用我们自定义的东西。
// 加载自定义配置文件
@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");
}