Mybatis指定日志输出实现

简介: 10             Mybatis指定日志输出实现          在程序开发过程中,为了调试方便、了解程序的运行过程,进行必要的日志输出总是免不了的。对于使用Mybatis而言,我们常见的需求是希望可以在日志中打印出Mybatis执行过程中进行数据库操作的SQL语句及其传递的参数。

10             Mybatis指定日志输出实现

         在程序开发过程中,为了调试方便、了解程序的运行过程,进行必要的日志输出总是免不了的。对于使用Mybatis而言,我们常见的需求是希望可以在日志中打印出Mybatis执行过程中进行数据库操作的SQL语句及其传递的参数。Mybatis的日志输出是统一管理的,它有自己的日志接口,然后在需要进行日志输出的时候使用统一的API进行日志输出。这个统一的接口是org.apache.ibatis.logging.LogMybatis分别基于常用的日志输出工具给出了对应的实现,比如LOG4JSLF4J等。默认情况下Mybatisorg.apache.ibatis.logging.LogFactory会按照以下顺序依次判断当前程序下可以使用哪种日志实现,直到找到为止,如果一个实现都没有那就是最后的noLogging了,将采用NoLoggingImpl实现。

 

  static {

    tryImplementation(new Runnable() {

      @Override

      public void run() {

        useSlf4jLogging();

      }

    });

    tryImplementation(new Runnable() {

      @Override

      public void run() {

        useCommonsLogging();

      }

    });

    tryImplementation(new Runnable() {

      @Override

      public void run() {

        useLog4J2Logging();

      }

    });

    tryImplementation(new Runnable() {

      @Override

      public void run() {

        useLog4JLogging();

      }

    });

    tryImplementation(new Runnable() {

      @Override

      public void run() {

        useJdkLogging();

      }

    });

    tryImplementation(new Runnable() {

      @Override

      public void run() {

        useNoLogging();

      }

    });

  }

 

         上述的默认机制有的时候可能不能满足你的需求,比如有的时候可能你是想使用Commons-Logging,但是因为类路径中包含SLF4J的包,结果Mybatis就自动使用了SLF4J了,所以如果有自己明确想使用的日志实现时,我们应该自己来指定日志实现,这可以通过在Mybatis的全局配置文件中通过如下进行配置,这里的value是一个日志实现的别名,可选值有SLF4JCOMMONS_LOGGINGLOG4JLOG4J2JDK_LOGGINGSTDOUT_LOGGINGNO_LOGGING,如果希望使用的日志输出实现是Mybatis自身没有实现的,我们也可以自己来实现,只需要自己定义一个类实现Mybatisorg.apache.ibatis.logging.Log接口,然后在下面的配置中把value属性改为自己的实现类的全路径名称即可。

      <setting name="logImpl" value="LOG4J"/>

         完整配置文件大概是如下这样。

<?xml version="1.0" encoding="UTF-8" ?> 

<!DOCTYPE configuration 

  PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 

  "http://mybatis.org/dtd/mybatis-3-config.dtd"> 

<configuration> 

    <properties resource="jdbc.properties"/> 

   <settings>

      <setting name="logImpl" value="LOG4J"/>

   </settings>

    <environments default="development"> 

        <environment id="development"> 

            <transactionManager type="JDBC" /> 

            <dataSource type="POOLED"> 

                <property name="driver" value="${jdbc.driver}" /> 

                <property name="url" value="${jdbc.url}" /> 

                <property name="username" value="${jdbc.username}" /> 

                <property name="password" value="${jdbc.password}" /> 

            </dataSource>   

        </environment> 

    </environments> 

    <mappers> 

 

    </mappers> 

</configuration> 

 

         Mybatis的日志输出可以输出数据库连接的获取、释放信息;可以输出执行的SQL语句及其传递的预编译参数信息;可以输出查询结果集信息(需要是trace输出级别,其它的是DEBUG级别);Mybatis的日志输出实现是通过JDK的动态代理来实现的,针对Connection的日志输出提供了ConnectionLogger;针对Statement提供了StatementLogger;针对PreparedStatement提供了PreparedStatementLogger;针对ResultSet提供了ResultSetLogger,这些Logger类都是实现了JDKInvocationHandler类的。

 

(注:本文是基于Mybatis3.3.1所写,写于2017122日星期日)

 

 

 

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
SQL XML Oracle
Mybatis动态SQL语句查询,实现一个参数 可查询多个字段。
Mybatis动态SQL语句查询,实现一个参数 可查询多个字段。
372 0
Mybatis动态SQL语句查询,实现一个参数 可查询多个字段。
|
Java 数据库连接 mybatis
MyBatis使用PageHelper实现分页查询
MyBatis使用PageHelper实现分页查询
|
存储 前端开发 IDE
springboot使用mybatis多数据源动态切换的实现
springboot使用mybatis多数据源动态切换的实现
|
SQL Java 数据库连接
Mybatis中sql拦截增强-AOP+interceptor实现分页和排序
基于interceptor可以实现sql的完整打印,除了实现打印之外。其实还可以实现分页和排序,下面的分页和排序基于aop+mybatis的interceptor实现。其本质还是对mappedStament的boundSql进行增强。 下面的项目来源于github,通过这个我们可以很好的学习mybatis中插件interceptor的使用。
740 0
Mybatis中sql拦截增强-AOP+interceptor实现分页和排序
|
Java BI 数据安全/隐私保护
基于JSP+Mybatis实现的CRM客户关系管理系统
基于JSP+Mybatis实现的CRM客户关系管理系统
108 0
基于JSP+Mybatis实现的CRM客户关系管理系统
|
SQL XML 存储
MyBatis的优点和缺点以及MyBatis 实现一对一的方式介绍
1、什么是 MyBatis,2、MyBatis 的优点和缺点,3、#{}和${}的区别是什么,4、当实体类中的属性名和表中的字段名不一样 ,怎么办?, 5、MyBatis 实现一对一有几种方式?具体怎么操作的,(联合查询和嵌套查询,联合查询是几个表联合查询,只查询一次, 通过在 resultMap 里面配置 association 节点配置一对一的类就可以完成;)
|
JavaScript 前端开发 Java
SpringBoot+Vue+Mybatis+Redis实现汽车租赁系统【毕设专用、源码、数据库设计】
SpringBoot+Vue+Mybatis+Redis实现汽车租赁系统【毕设专用、源码、数据库设计】
188 0
SpringBoot+Vue+Mybatis+Redis实现汽车租赁系统【毕设专用、源码、数据库设计】
|
Java 数据库连接 数据库
详解mybatis实现crud
详解mybatis实现crud
78 0
详解mybatis实现crud
|
Java 数据库连接 数据库
springboot03、实现mybatis
springboot03、实现mybatis
60 0
springboot03、实现mybatis
|
Java 数据库连接 数据库
【Mybatis】学习笔记02:实现简单的查
【Mybatis】学习笔记02:实现简单的查
76 0
【Mybatis】学习笔记02:实现简单的查