title: “java日志体系”
createTime: 2021-12-08T12:19:57+08:00
updateTime: 2021-12-08T12:19:57+08:00
draft: false
author: “ggball”
tags: [“mybatis”]
categories: [“java”]
description: “java日志体系”
java日志体系
常用日志框架
- Log4j:Apache Log4j是一个基于Java的日志记录工具。它是由Ceki Gülcü首创的,现在则是Apache软件基金会的一个项目。
- Log4j 2:Apache Log4j 2是Apache开发的一款Log4j的升级产品。
- Commons Logging:Apache基金会所属的项目,是一套Java日志接口,之前叫Jakarta Commons Logging,后更名为Commons Logging。Apache推出了JCL(Jakarta Commons Logging),它只是定义了一套日志接口(其内部也提供一个Simple Log的简单实现),JCL也是一套接口规范,支持运行时动态加载日志组件的实现。也就是说,在应用程序代码中,只需调用Commons Logging的接口,底层实现可以是Log4j,也可以是JUL
- SLF4J:全称为Simple Logging Facade for Java,类似于Commons Logging,是一套简易Java日志门面,本身并无日志的实现。
- Logback:是一套日志组件的实现,属于SLF4J阵营。
- JUL:全称是Java Util Logging,是JDK1.4以后提供的日志实现。
mybatis日志体系
日志接口
定义了打印日志的级别
日志实现
配置日志框架的三种方式
1. 手动指定日志框架
1.先确定日志的Constructor对象
2.再利用Constructor对象和类名创建日志对象
3.打印日志的功能交给其他对象
2. 自动配置日志框架
如果不指定日志框架,mybatis也会尝试去找日志的实现
LogFactory中有静态代码块,会率先执行里面的代码,顺序执行(MyBatis查找日志框架的顺序为SLF4J→JCL→Log4j2→Log4j→JUL→No Logging),注意这里的run不是线程的run的概念,单纯只是匿名函数,传入Runnable对象,会执行它的run方法而已
比如会先执行第一个useSlf4jLogging 方法,如果找不到Slf4j对应的jar包,会抛出异常,但是不做任何处理,则继续执行下一个useCommonsLogging方法,如果找到了对应的jar包,会创建
Constructor对象在LogFactory对象里,然后继续执行tryImplementation、useLog4JLogging方法,每次都会判断Constructor对象为空,如果不为空则不会执行Runnable对象的run方法,从而实现自动确定日志框架。
3. 配置文件指定日志框架
项目启动时,会去读取mybatis配置文件,将logImpl的值set到configuration对象,如果有配置日志实现,configuration对象会在调用setLogImpl,来创建指定日志的Constructor对象
总结
三种配置日志框架的方法,了解怎么把日志实现交给mybatis,mybatis如何设置日志框架的, 日志框架设计的很巧妙,接口和实现完全分开来,用户可以随意搭配实现。