10             Mybatis指定日志输出实现

在程序开发过程中,为了调试方便、了解程序的运行过程,进行必要的日志输出总是免不了的。对于使用Mybatis而言,我们常见的需求是希望可以在日志中打印出Mybatis执行过程中进行数据库操作的SQL语句及其传递的参数。Mybatis的日志输出是统一管理的,它有自己的日志接口,然后在需要进行日志输出的时候使用统一的API进行日志输出。这个统一的接口是org.apache.ibatis.logging.Log。Mybatis分别基于常用的日志输出工具给出了对应的实现,比如LOG4J、SLF4J等。默认情况下Mybatis的org.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是一个日志实现的别名,可选值有SLF4J、COMMONS_LOGGING、LOG4J、LOG4J2、JDK_LOGGING、STDOUT_LOGGING、NO_LOGGING,如果希望使用的日志输出实现是Mybatis自身没有实现的,我们也可以自己来实现,只需要自己定义一个类实现Mybatis的org.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类都是实现了JDK的InvocationHandler类的。

(注:本文是基于Mybatis3.3.1所写,写于2017年1月22日星期日)

Mybatis指定日志输出实现相关推荐

  1. Logback日志乱码,指定日志输出路径,日志彩色输出

    Logback日志乱码: 处理方案1: <encoder><charset class="java.nio.charset.Charset">UTF-8&l ...

  2. linux启动jar包指定日志输出目录下,linux 启动jar包 指定yml配置文件和输入日志文件...

    命令为: nohup java -jar project.jar  --spring.config.location=/home/project-conf/application.yml >  ...

  3. springboot 集成mybatis时日志输出

    application.properties(yml)中配置的两种方式: 这两种方式的效果是一样的,但是下面一种可以指定某个包下的SQL打印出来,上面这个会全部的都会打印出来. 转载于:https:/ ...

  4. Python的日志输出

    文章目录 logging模块 一. 基础使用 1. 简介 2. 常用函数 3. 日志配置 二. 日志进阶 1. 四大组件 2. Logger组件 2.1 常用方法 2.2 获取对象 2.3 层级等级 ...

  5. Mybatis 的Log4j日志输出问题 - 以及有关日志的所有问题

    转载自   Mybatis 的Log4j日志输出问题 - 以及有关日志的所有问题 使用Mybatis的时候,有些时候能输出(主要是指sql,参数,结果)日志.有些时候就不能. 无法输出日志的时候,无论 ...

  6. MyBatis使用log4j输出日志

    MyBatis使用log4j输出日志 引入依赖 创建log4j.xml 引入依赖 在当前项目的pom.xml中引入log4j.xml的依赖. <!-- log4j日志 --><dep ...

  7. java log输出到文件路径_log4j中日志输出文件指定相对路径的方法

    log4j中日志输出文件指定相对路径的方法 1.设置在 C:/log/error.log log4j.appender.E = org.apache.log4j.RollingFileAppender ...

  8. log4j日志输出到web项目指定文件夹

    尝试将log4j的文件日志输出到web工程制定目录,遇到了很多问题,最终搞定,下面是记录. 其原理在于log4j的配置文件支持服务器的vm的环境变量,如${oss.log4j.path},在log4j ...

  9. 将后台日志输出到指定文件中,并且每天生成一个日志文件

    主要有以下四部: 一.导包   (我用的是org.apache.log4j.Logger                    将 log4j-1.2.17.jar放到lib下面) 二.在web.xm ...

最新文章

  1. 从源码分析DEARGUI之交互添加和删除组件
  2. PlayFramework入门教程
  3. Java对异常处理或抛出之后,后面代码会不会再执行?
  4. 感恩工作平台心得体会_感恩有你,一路同行——石龙联社组织举办10月份员工集体生日会...
  5. 送30块树莓派PICO 开发板!
  6. js中使用camel框架_使用Fabric8在Kubernetes中使用Camel和CDI
  7. MFC 获取其他窗口的Edit文本和单击Button
  8. 多种方法列出集合中的所有子集(Python和Java实现)
  9. FlexForAndroid:文件读写
  10. 【清单】—— 编程方法、整洁代码与重构
  11. 《疯狂Java讲义》(七)---- 方法
  12. 2022华为软件精英挑战赛
  13. 服务器来料检测作用,IQC来料检验项目
  14. 聊天别被人家说的“职业技术”忽悠了
  15. MySQL——连接查询
  16. java cda安装_JAVA如何与R完美结合起来
  17. EasyWeChat微信开发平台第三方接入(Laravel5+,EasyWeChat3.0/EasyWeChat4.0)
  18. 基于PHP MYsql的失物招领网站设计(附源码)
  19. 英华学堂网课助手Linux版本
  20. 实战-完整代码答题系统

热门文章

  1. JavaScript箭头函数(Arrow Function)
  2. 给批量用户设磁盘配额
  3. 2017 年 VR 将走的 3 个方向 你更认可哪一个?
  4. NSPredicate 查询/搜索
  5. ipvs-dr模型及算法、keepalived基本应用、keepalive+ipvs实现高可用
  6. 不用IIS运行ASP.Net网站
  7. 【orange】【转】orange使用
  8. java 原生sql批量插入,Java对象集合转MySQL批量插入语句
  9. 架构师之路 — 分布式系统 — 分布式一致性难题
  10. NetDevOps — YANG 协议