Mybatis指定日志输出实现
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指定日志输出实现相关推荐
- Logback日志乱码,指定日志输出路径,日志彩色输出
Logback日志乱码: 处理方案1: <encoder><charset class="java.nio.charset.Charset">UTF-8&l ...
- linux启动jar包指定日志输出目录下,linux 启动jar包 指定yml配置文件和输入日志文件...
命令为: nohup java -jar project.jar --spring.config.location=/home/project-conf/application.yml > ...
- springboot 集成mybatis时日志输出
application.properties(yml)中配置的两种方式: 这两种方式的效果是一样的,但是下面一种可以指定某个包下的SQL打印出来,上面这个会全部的都会打印出来. 转载于:https:/ ...
- Python的日志输出
文章目录 logging模块 一. 基础使用 1. 简介 2. 常用函数 3. 日志配置 二. 日志进阶 1. 四大组件 2. Logger组件 2.1 常用方法 2.2 获取对象 2.3 层级等级 ...
- Mybatis 的Log4j日志输出问题 - 以及有关日志的所有问题
转载自 Mybatis 的Log4j日志输出问题 - 以及有关日志的所有问题 使用Mybatis的时候,有些时候能输出(主要是指sql,参数,结果)日志.有些时候就不能. 无法输出日志的时候,无论 ...
- MyBatis使用log4j输出日志
MyBatis使用log4j输出日志 引入依赖 创建log4j.xml 引入依赖 在当前项目的pom.xml中引入log4j.xml的依赖. <!-- log4j日志 --><dep ...
- java log输出到文件路径_log4j中日志输出文件指定相对路径的方法
log4j中日志输出文件指定相对路径的方法 1.设置在 C:/log/error.log log4j.appender.E = org.apache.log4j.RollingFileAppender ...
- log4j日志输出到web项目指定文件夹
尝试将log4j的文件日志输出到web工程制定目录,遇到了很多问题,最终搞定,下面是记录. 其原理在于log4j的配置文件支持服务器的vm的环境变量,如${oss.log4j.path},在log4j ...
- 将后台日志输出到指定文件中,并且每天生成一个日志文件
主要有以下四部: 一.导包 (我用的是org.apache.log4j.Logger 将 log4j-1.2.17.jar放到lib下面) 二.在web.xm ...
最新文章
- 从源码分析DEARGUI之交互添加和删除组件
- PlayFramework入门教程
- Java对异常处理或抛出之后,后面代码会不会再执行?
- 感恩工作平台心得体会_感恩有你,一路同行——石龙联社组织举办10月份员工集体生日会...
- 送30块树莓派PICO 开发板!
- js中使用camel框架_使用Fabric8在Kubernetes中使用Camel和CDI
- MFC 获取其他窗口的Edit文本和单击Button
- 多种方法列出集合中的所有子集(Python和Java实现)
- FlexForAndroid:文件读写
- 【清单】—— 编程方法、整洁代码与重构
- 《疯狂Java讲义》(七)---- 方法
- 2022华为软件精英挑战赛
- 服务器来料检测作用,IQC来料检验项目
- 聊天别被人家说的“职业技术”忽悠了
- MySQL——连接查询
- java cda安装_JAVA如何与R完美结合起来
- EasyWeChat微信开发平台第三方接入(Laravel5+,EasyWeChat3.0/EasyWeChat4.0)
- 基于PHP MYsql的失物招领网站设计(附源码)
- 英华学堂网课助手Linux版本
- 实战-完整代码答题系统