微服务[v1.0.0][MyBatis日志信息配置]

MyBatis日志信息配置

使用MyBatis的时候,经常需要输出SQL语句、参数信息、查询结 果等日志信息,为此MyBatis也提供了非常简单有效的解决方案。MyBatis内置的日志工厂提供日志功能,具体的日志实现有以下几 种工具:

  • SLF4J
  • Apache Commons Logging
  • Log4j 2
  • 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推荐的做法

<configuration>
	<settings>
		...
		<setting name="logImpl" value="LOG4J"/>
		...
	</settings>
</configuration>

这样就是告诉MyBatis当前项目的日志实现使用Log4j,Log4j的配 置信息就会起作用。
logImpl可选的值有:SLF4J、LOG4J、LOG4J2、JDK_LOGGING、 COMMONS_LOGGING、STDOUT_LOGGING、NO_LOGGING 或者是 实现了接口org.apache.ibatis.logging.Log的类的完全限定类名,并且这个 类的构造函数需要以一个字符串(String类型)为参数。具体可以参考org.apache.ibatis.logging.slf4j.Slf4jImpl.java的实现

MyBatis可以对包、类、命名空间和全限定的语句记录日志。
具体怎么做,视使用的日志框架而定,这里以Log4j为例。配置日志功能非常简单:首先增加依赖的jar包,如log4j.jar,log4j.jar可以直接在mybatis-3.4.5解压文件夹下的lib文件夹中找到,也可以自己去官网下载,再添加配置文件,有log4j.properties或log4j.xml两种,下面分别讲解 两种配置文件

log4j.properties配置日志

例如需要记录这个mapper接口的日志:

package org.davieyang.mapper;
public interface UserMapper{
	@Select("SELECT * FROM tb_user WHERE id = #{id}")
	User selectUser(int id);
}

在应用的CLASSPATH中增加一个名称为log4j.properties的文件,文 件的具体内容如下:

# 全局日志环境变量
log4j.rootLogger=ERROR, stdout
# MyBatis日志环境配置
log4j.logger.org.davieyang.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.davieyang.mapper.UserMapper的TRACE(详细执行)日志记录下来,对于应用中的其他类则仅仅记录 ERROR(错误信息),也可以将日志从整个mapper接口级别调整到语句级别,从而实现更 细粒度的控制。如下配置只记录 selectUser 语句的日志:
log4j.logger.org.davieyang.mapper.UserMapper.selectUser=TRACE
也可以对一组mapper接口记录日志,只要对mapper接口所在的包开 启日志功能即可:
log4j.logger.org.davieyang.mapper=TRACE
某些查询可能会返回大量的数据,如果只想记录其执行的 SQL 语 句该怎么办?为此,MyBatis中SQL语句的日志级别被设为 DEBUG(JDK Logging中为FINE),结果日志的级别为TRACE(JDK Logging中为FINER).所以,只要将日志级别调整为DEBUG即可:
log4j.logger.org.davieyang.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">
<mapper namespace="org.davieyang.mapper.UserMapper">
	<select id="selectUser" resultType="Blog">
		select * from tb_user where id= #{id}
	</select>
</mapper>

只要对命名空间增加日志记录功能即可:log4j.logger.org.davieyang.mapper=TRACE

log4j.xml配置日志

之前的Java项目都是采取properties文件作为配置文件,而最新的项 目大多采用XML文件作为配置文件。在应用的CLASSPATH中增加一个名称为log4j.xml的文件,文件的 具体内容如下:

<?xml version"1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
	<appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
		<layout class="org.apache.log4j.PatternLayout">
			<param name="ConversionPattern" value="%5p [%t] - %m%n"/>
		</layout>
	</appender>
	<logger name="org.davieyang.mapper.UserMapper">
		<level value="TRACE"/>
	</logger>
	<root>
		<level value="ERROR"/>
		<appender-ref ref="STDOUT">
	</root>
</log4j:configuration>

添加以上配置后,Log4j就会把 org.davieyang.mapper.UserMapper的TRACE(详细执行)日志记录下来,对于应用中的其他类则仅仅记录 ERROR(错误信息),也可以将日志从整个mapper接口级别调整到语句级别,从而实现更细粒度的控制。如下配置只记录 selectUser 语句的日志:

<logger name="org.davieyang.mapper.UserMapper.selectUser">
	<level value="TRACE">
</logger>

也可以对一组mapper接口记录日志,只要对mapper接口所在的包开 启日志功能即可:

<logger name="org.davieyang.mapper">
	<level value="TRACE">
</logger>

某些查询可能会返回大量的数据,如果只想记录其执行的 SQL 语 句该怎么办?为此,MyBatis中SQL语句的日志级别被设为 DEBUG(JDK Logging中为FINE),结果日志的级别为TRACE(JDK Logging中为FINER)。所以,只要将日志级别调整为DEBUG即可:

<logger name="org.davieyang.mapper">
	<level value="DEBUG">
</logger>

如果要记录日志的是类似下面的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">
<mapper namespace="org.davieyang.mapper.UserMapper">
	<select id="selectUser" resultType="Blog">
		select * from tb_user where id=#{id}
	</select>
</mapper>

只要对命名空间增加日志记录功能即可:

<logger name="org.davieyang.mapper.UserMapper">
	<level value="TRACE">
</logger>
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Davieyang.D.Y

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值