美文网首页
mybatis如何智能感知用户使用的日志

mybatis如何智能感知用户使用的日志

作者: 垃圾简书_吃枣药丸 | 来源:发表于2021-10-20 10:28 被阅读0次

# Log

  • 首先定义一个基类org.apache.ibatis.logging.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);
}

# LogImpl

  • 使用不同的供应商分别实现这个接口


    image.png
  • 例如slf4j的实现: org.apache.ibatis.logging.slf4j.Slf4jImpl

    image.png
  • 且在每个实现类创建有参的构造方法,用于传递logName


    image.png

# LogFactory

  • 首先在静态代码块中有序尝试实现支持的日志系统

    image.png
  • 尝试实现,失败了就捕获异常,继续尝试下一个

  private static void tryImplementation(Runnable runnable) {
    if (logConstructor == null) {
      try {
        runnable.run();
      } catch (Throwable t) {
        // ignore
      }
    }
  }
  • 实现逻辑,获取到有参的构造方法,并赋值给类变量private static Constructor<? extends Log> logConstructor;
  private static void setImplementation(Class<? extends Log> implClass) {
    try {
      Constructor<? extends Log> candidate = implClass.getConstructor(String.class);
      Log log = candidate.newInstance(LogFactory.class.getName());
      if (log.isDebugEnabled()) {
        log.debug("Logging initialized using '" + implClass + "' adapter.");
      }
      logConstructor = candidate;
    } catch (Throwable t) {
      throw new LogException("Error setting Log implementation.  Cause: " + t, t);
    }
  }
  • 既然已经获取到了Log的构造方法,那么在LogFactory.getLog(x)获取Log的时候,通过这个构造方式实例化对象,即可获取到Log
  public static Log getLog(Class<?> aClass) {
    return getLog(aClass.getName());
  }

  public static Log getLog(String logger) {
    try {
      return logConstructor.newInstance(logger);
    } catch (Throwable t) {
      throw new LogException("Error creating logger for logger " + logger + ".  Cause: " + t, t);
    }
  }

# 其他

  • 在mybatis源码中,三方的日志依赖都是<optional>true</optional>的,不传递日志的依赖,由用户来选择使用的日志供应商。

挺巧妙的~

相关文章

  • mybatis如何智能感知用户使用的日志

    # Log 首先定义一个基类org.apache.ibatis.logging.Log # LogImpl 使用不...

  • idea 集成springboot+mybatis框架如何在控制

    idea 集成springboot+mybatis框架如何在控制台打印mybatis日志 在项目的resource...

  • MyBatis实现日志

    一.日志 Mybatis 通过使用内置的日志工厂提供日志功能。内置日志工厂将会把日志工作委托给下面的实现之一:SL...

  • 推荐系统架构-4 用户行为日志

    一、推荐系统 二、阿里云智能推荐AIRec 三、用户画像介绍 四、用户行为日志 1、用户行为日志 用户行为数据在系...

  • Mybatis源码-日志模块(1)

      Mybatis的日志模块的作用是为了让mybatis在项目中被使用的时候,无论什么情况都能有一种日志实现让my...

  • springboot

    与mybatis集成 打开内嵌tomcat access日志 使用tomcat Servlet、Filter、Li...

  • 前端性能优化:客户端从输入到展示讲解

    性能优化的根本目的: ==>要思考的是用户使用网站的体验如何,而不是我们可以节省多少字节,只有准确感知用户的感受,...

  • 使用Redis做Mybatis二级缓存

    介绍 使用mybatis时可以使用二级缓存提高查询速度,进而改善用户体验。 使用redis做mybatis的二级缓...

  • Mybatis的logging

    使用Mybatis的时候,有些时候能输出(主要是指sql,参数,结果)日志。有些时候就不能。 无法输出日志的时候,...

  • 如何运营好你的产品?

    如何运营好你的产品? 一、了解用户使用你的服务的预期; 二、做到用户感知的服务与用户的预期一致,并不断加强这种认知...

网友评论

      本文标题:mybatis如何智能感知用户使用的日志

      本文链接:https://www.haomeiwen.com/subject/wwqtaltx.html