9.3 MyBatis日志信息配置 9.3.1 log4j.properties配置日志
9.3 MyBatis日志信息配置
使用MyBatis的时候,经常需要输出SQL语句、参数信息、查询结果等日志信息,为此MyBatis也提供了非常简单有效的解决方案。
MyBatis内容的日志功能
MyBatis内置的日志工厂提供日志功能,具体的日志实现有以下几种工具
SLF4JApache Commons LoggingLog4j2Log4jJDK logging
具体选择哪个日志实现工具由MyBatis的内置日志工厂决定。它会使用最先找到的按上文列举的顺序查找)。如果一个都未找到,日志功能就会被禁用。
不少应用服务器的classpath中己经包含Apache Commons Logging,如Tomcat和WebShpere,所以MyBatis会把它作为具体的日志实现。记住这点非常重要。这将意味着在诸如WebSphere的环境中WebSphere提供了Apache Commons Logging的私有实现,你的Log4j配置将被忽略。
不过,如果你的应用部署在一个包含Apache Commons Logging的环境里,而你又想用其他的日志框架比如Log4j,可以通过在MyBatis的配置文件mybatis-config.xml里面添加一项setting(配置)来选择一个不同的日志实现。这也是MyBatis推荐的做法。
使用Log4j
在mybatis的配置文件mybatis-config.xml中添加如下配置:
1 |
|
这样就是告诉MyBatis当前项目的日志实现使用Log4j,Log4j的配置信息就会起作用。
logImpl属性值
logImpl可选的值有:SLF4J、LOG4J、LOG4J2、JDK_LOGING、COMMONS_LOGING、STDOUT_LOGGING、NO_LOGGING或者是实现了接口org.apache.ibatis.logging.Log的类的完全限定类名,并且这个类的构造函数需要以一个字符串(String类型)为参数。具体可以参考org.apache.ibatis.logging.slf4j.Slf4jImpl.java的实现。
下载log4j的jar包
从mybatis-版本解压目录下的lib目录中找到
log4j.jar可以直接在mybatis-版本解压文件夹下的lib文件夹中找到:
G:\Desktop\随书源码\库文件\mybatis-3.5.2\lib ├─ant-1.10.3.jar ├─ant-launcher-1.10.3.jar ├─asm-7.0.jar ├─cglib-3.2.10.jar ├─commons-logging-1.2.jar ├─javassist-3.24.1-GA.jar ├─log4j-1.2.17.jar ├─log4j-api-2.11.2.jar ├─log4j-core-2.11.2.jar ├─ognl-3.2.10.jar ├─slf4j-api-1.7.26.jar └─slf4j-log4j12-1.7.26.jar
官网下载
也可以自己去官网下载.
Mybatis配置log4j日志步骤
MyBatis可以对包、类、命名空间和全限定的语句记录日志.
具体怎么做,视使用的日志框架而定,这里以Log4j为例。配置日志功能非常简单:
- 首先增加依赖的
jar包,如log4j.jar, - 再添加配置文件,有
log4j.properties或log4j.xml两种,下面分别讲解两种配置文件。
添加log4j的配置文件
添加配置文件,有log4j.properties或log4j.xml两种,下面分别讲解两种配置文件
9.3.1 log4j.properties配置日志
对mapper接口的日志配置
比如需要记录org.fkit.mapper包下的这个UserMapper接口的日志:
1 | package org.fkit.mapper; |
在应用的CLASSPATH中增加一个名称为log4j.properties的文件,文件的具体内容如下:
# 全局日志环境配置 log4j.root.Logger=ERROR, stdout # MyBatis日志环境配置... log4j.logger.org.fkit.mapper.UserMapper=TRACE # 控制台输出... log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
类级别的日志
添加以上配置后,Log4j就会把org.fkit.mapper.UserMapper的TRACE(详细执行)日志记录下来,对于应用中的其他类则仅仅记录ERROR(错误信息)。
语句级别的日志
也可以将日志从整个mapper接口级别调整到语句级别,从而实现更细粒度的控制。如下配置只记录selectUser语句的日志:
1 | log4j.logger.org.fkit.mapper.UserMapper.selectUser=TRACE |
包级别的日志
也可以对一组mapper接口记录日志,只要对mapper接口所在的包开启日志功能即可:
1 | log4j.logger.org.fkit.mapper=TRACE |
某些查询可能会返回大量的数据,如果只想记录其执行的SQL语句该怎么办? 为此,MyBatis中SQL语句的日志级别被设为DEBUG(JDK Logging中为FINE),结果日志的级别为TRACE(JDK Logging中为FINER)。所以,只要将日志级别调整为DEBUG即可:
1 | log4j.logger.org.fkit.mapper=DEBUG |
对mapper文件的日志配置
如果要记录日志的是类似下面的mapper文件而不是接口又该怎么办呢?
<?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">
<!-- namespace指用户自定义的命名空间。 -->
<mapper namespace="org.fkit.mapper.UserMapper">
<insert
id="saveUser"
parameterType="user"
useGeneratedKeys="true"
keyProperty="id"> insert into tb_user(name,sex,age) values(#{name},#{sex},#{age})
</insert>
</mapper>
只要对命名空间增加日志记录功能即可:
log4j.logger.org.fkit.mapper=TRACE