当前位置: 首页 > news >正文

MyBatis基础模块-日志模块

首先日志在我们开发过程中占据了一个非常重要的地位,是开发和运维管理之间的桥梁,在Java中的日志框架也非常多,Log4j,Log4j2,Apache Commons Log,java.util.logging,slf4j等,这些工具对外的接口也都不尽相同,为了统一这些工具,MyBatis定义了一套统一的日志接口供上层使用。首先大家对于适配器模式要了解下哦。

1、Log

Log接口中定义了四种日志级别,相比较其他的日志框架的多种日志级别显得非常的精简,但也能够满足大多数常见的使用了
public interface Log {
   

  boolean isDebugEnabled();

  boolean isTraceEnabled();

  void error(String s, Throwable e);

  void error(String s);

  void debug(String s);

  void trace(String s);

  void warn(String s);

}

2、LogFactory

LogFactory工厂类负责创建日志组件适配器,

image.png

在LogFactory类加载时会执行其静态代码块,其逻辑是按序加载并实例化对应日志组件的适配器,然后使用LogFactory.logConstructor这个静态字段,记录当前使用的第三方日志组件的适配器。具体代码如下,每个方法都比较简单就不一一赘述了。

3、 日志应用

那么在MyBatis系统启动的时候日志框架是如何选择的呢?首先我们在全局配置文件中我们可以设置对应的日志类型选择

image.png

这个"STDOUT_LOGGING"是怎么来的呢?在Configuration的构造方法中其实是设置的各个日志实现的别名的

image.png

然后在解析全局配置文件的时候就会处理日志的设置

image.png

进入方法

  private void loadCustomLogImpl(Properties props) {
   
    // 获取 logImpl设置的 日志 类型
    Class<? extends Log> logImpl = resolveClass(props.getProperty("logImpl"));
    // 设置日志
    configuration.setLogImpl(logImpl);
  }

进入setLogImpl方法中

  public void setLogImpl(Class<? extends Log> logImpl) {
   
    if (logImpl != null) {
   
      this.logImpl = logImpl; // 记录日志的类型
      // 设置 适配选择
      LogFactory.useCustomLogging(this.logImpl);
    }
  }

再进入useCustomLogging方法

  public static synchronized void useCustomLogging(Class<? extends Log> clazz) {
   
    setImplementation(clazz);
  }

再进入

  private static void setImplementation(Class<? extends Log> implClass) {
   
    try {
   
      // 获取指定适配器的构造方法
      Constructor<? extends Log> candidate = implClass.getConstructor

相关文章:

  • hive 面试题
  • Android Activity栈关系解析
  • 【朝夕教育】《鸿蒙原生应用开发从零基础到多实战》005-TypeScript 中的枚举
  • 各章节详细总结与 Vue 学习收尾
  • Java——GUI
  • NLP11-命名实体识别(NER)概述
  • Jordan标准型的意义和应用
  • 数据集笔记:新加坡停车费
  • 蜂鸣器使用
  • agent实现路径规划
  • Android 系统 AMS(ActivityManagerService)
  • js算法逆向(逆向获取加密算法) 多体位断点 bp枚举爆破
  • 不同规模企业如何精准选择AI工具: DeepSeek、Grok 和 ChatGPT 三款主流 AI 工具深度剖析与对比
  • 3-6 WPS JS宏 工作表移动复制实例-1(工作表的拆分操作)学习笔记
  • 【Android】类加载器热修复-随记(二)
  • 中科大计算机网络笔记第一章1.8 互联网历史笔记
  • 蓝桥备赛(四)- 数组(下)
  • weblogic 服务器启动位置
  • Vue核心知识:Vue动态权限到按钮完整方案
  • 【SpringCloud】Gateway
  • 照护者说|胡泳:向死而在,爱这个世界
  • 人民日报任平:从“地瓜经济”理论到民营经济促进法,读懂中国经济的成长壮大之道
  • 黄仁勋:新一代计算平台GB300三季度上市,AI计算能力每十年提升100万倍
  • 上海徐汇 “家 + 书屋”,创新服务广大家庭
  • 家庭医生可提前5天预约三甲医院号源,上海常住人口签约率达45%,
  • 多图|多款先进预警机亮相雷达展,专家:中国预警机已达世界先进水平