MyBatis日志
(本文作为学习笔记,了解更多请参考:MyBatis参考文档)
简单介绍
MyBatis内置了日志工厂,将日志交给以下其中一种工具作代理:
- SLF4J
- Apache Commons Logging
- Log4j 2
- Log4j
- JDK logging
MyBatis运行时会按照以上列举的顺序查找,然后使用第一个查找到的工具,若未找到,则日志功能将会被禁用。
- Tip:
在某些应用服务器(如Tomcat和WebShpere)的类路径中已经包含了Commons Logging,因此这种配置环境下MyBatis会把它当作日志工具从而忽略掉你的Log4j配置。若你的应用部署在一个类路径已经包含Commons Logging的环境中,而你又想使用其他日志工具,可以在MyBatis配置文件,ybatis-congif.xml里添加一项settings来选择其他的之日工具
<configuration>
<settings>
...
<setting name="logImpl" value="LOG4J"/>
...
</settings>
</configuration>
logImpl 可选的值有:SLF4J、LOG4J、LOG4J2、JDK_LOGGING、COMMONS_LOGGING、STDOUT_LOGGING、NO_LOGGING,或者是实现了接口 org.apache.ibatis.logging.Log 的,且构造方法是以字符串为参数的类的完全限定名。
日志配置
你可以对包、映射类的全限定名、命名空间或全限定语句名开启日志功能来查看 MyBatis 的日志语句。
再次说明下,具体怎么做,由使用的日志工具决定,这里以 Log4J 为例。配置日志功能非常简单:添加一个或多个配置文件(如 log4j.properties),有时需要添加 jar 包(如 log4j.jar)。下面的例子将使用 Log4J 来配置完整的日志服务,共两个步骤:
- 添加Log4J的jar包
- 配置Log4J
假设你需要记录这个映射器的日志:
package org.mybatis.example;
public interface BlogMapper {
@Select("SELECT * FROM blog WHERE id = #{id}")
Blog selectBlog(int id);
}
在应用的类路径下创建一个名称为log4j.properties的文件:
# Global logging configuration
log4j.rootLogger=ERROR, stdout
# MyBatis logging configuration...
log4j.logger.org.mybatis.example.BlogMapper=TRACE
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
若想要记录的是映射器文件而不是映射器接口:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.mybatis.example.BlogMapper">
<select id="selectBlog" resultType="Blog">
select * from Blog where id = #{id}
</select>
</mapper>
只需要对XML命名空间增加日志记录功能即可:
log4j.logger.org.mybatis.example.BlogMapper=TRACE