9.3 MyBatis日志信息配置 9.3.1 log4j.properties配置日志
9.3 MyBatis日志信息配置
使用MyBatis
的时候,经常需要输出SQL
语句、参数信息、查询结果等日志信息,为此MyBatis
也提供了非常简单有效的解决方案。
MyBatis内容的日志功能
MyBatis
内置的日志工厂提供日志功能,具体的日志实现有以下几种工具
SLF4J
Apache Commons Logging
Log4j2
Log4j
JDK 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