目录
1、框架介绍
- JUL是java原生的日志框架,使用时不需引要用第三方类库,相对其他日志框架使用方式简单,在小型应用中灵活使用
- Logger对象,调用其API来发布日志信息。Logger通常时应用程序访问日志系统的入口程序;
- Appenders:也被称为Handlers,每个Logger都会关联一组Handlers,Logger会将日志交给关联Handlers处理,由Handlers负责将日志做记录。Handlers在此是一个抽象,其具体的实现决定了日志记录的位置可以是控制台、文件、网络上的其他日志服务或操作系统日志等;
- Layouts: 也被称为Formatters,它负责对日志事件中的数据进行转换和格式化。Layouts决定了数据在一条日志记录中的最终形式;
- Level:每条日志消息都有一个关联的日志级别。该级别粗略指导了日志消息的重要性和紧迫,我可以将Level和Loggers,Appenders做关联以便于我们过滤消息;
- Filters:过滤器,根据需要定制哪些信息会被记录,哪些信息会被放过。
2、入门案例
public class JULTest {
//入门案例
@Test
public void quick(){
//1、获取日志记录器对象
Logger logger=Logger.getLogger("com.example.demo.JUL.JULTest");
//2、日志记录输出
logger.info("info级别日志");
//通用方法进行记录
logger.log(Level.INFO,"info msg");//与上面的方式效果一样
//通过占位符方式输出日志
logger.log(Level.INFO,"用户:{0},年龄{1}",new String[]{"log","24"});
}
}
3、日志级别 Level枚举(其中还包括一些日志开关)
- severe 最高级别,出现错误,终止
- warning 出现问题,但不会导致程序终止
- info 消息记录
- config 配置信息
- fine 记录debug时的日志信息,与下面参数粒度不一样而已
- finer
- finest
//日志级别、自定义配置
@Test
public void logLevel() throws IOException {
Logger logger=Logger.getLogger("com.example.demo.JUL.JULTest");
//自定义日志级别
//关闭默认日志级别配置
logger.setUseParentHandlers(false);
//创建ConsoleHandler对象
ConsoleHandler handler=new ConsoleHandler();
//创建简单合适转换对象
SimpleFormatter formatter=new SimpleFormatter();
//关联
handler.setFormatter(formatter);
logger.addHandler(handler);
//配置日志级别
logger.setLevel(Level.ALL);
handler.setLevel(Level.ALL);
// //文件输出
// FileHandler fileHandler=new FileHandler("/User/log/testJULLog.log");
// fileHandler.setFormatter(formatter);
// //关联
// handler.setFormatter(formatter);
// logger.addHandler(fileHandler);
logger.severe("severe");
logger.warning("warning");
logger.info("info");//jul 默认的应用级别是info,比info高级别的输出,低的不输出,可以通过level调整
logger.config("config");
logger.fine("fine");
logger.finer("finer");
logger.finest("finest");
}
4、logger对象父子关系
所有日志的顶级父对象:java.util.logging.LogManager$RootLogger@2a33fae0,值为空字符串
//日志的父子关系
@Test
public void logParent() {
Logger logger1 = Logger.getLogger("com");
Logger logger2 = Logger.getLogger("com.example");
System.out.println(logger2.getParent().equals(logger1));
//顶级父对象
System.out.println(logger2.getParent().getParent());
}