mybatis的⽇志打印关闭
使⽤Mybatis的时候,有些时候能输出(主要是指sql,参数,结果)⽇志。有些时候就不能。
⽆法输出⽇志的时候,⽆论怎么配置log4j,不管是properties的还是xml的,都不起作⽤。
有些时候,我们没做什么配置就能输出⽇志....
这是⼀个让⽆数⼈烦躁的问题。其实解决问题很容易(我过了这么久才解决,以前都⽤输出)。
这是⼀个普⼤喜奔的⽇⼦,让我们⼀起来看看如何解决mybatis的⽇志问题。
为什么说这个问题很容易解决呢?因为mybatis的⽂档写的很清楚。
为什么我们都没到解决办法呢?因为即使看过⽂档的⼈,也未必去看Logging这⼀节。但是这⼀节正是解决问题的关键。提醒最常⽤的⽅法不再这个链接中,但是这个⽂档提供了对log4j的详细配置。本⽂下⾯的内容⼤部分是这个⽂档的Copy。
[java]
1. org.apache.ibatis.logging.LogFactory.useSlf4jLogging();
2. org.apache.ibatis.logging.LogFactory.useLog4JLogging();
3. org.apache.ibatis.logging.LogFactory.useJdkLogging();
4. org.apache.ibatis.logging.LogFactory.useCommonsLogging();
matlab的imfilter函数5. org.apache.ibatis.logging.LogFactory.useStdOutLogging();
如果的确需要调⽤以上的某个⽅法,请在调⽤所有其他MyBatis⽅法前调⽤它。另外,只有在相应⽇志实现存在 的前提下,调⽤对应的⽅法才是有意义的,否则MyBatis⼀概忽略。如你环境中并不存在Log4J,你却调⽤了 相应的⽅法,MyBatis就会忽略这⼀调⽤,代之默认的查顺序查⽇志实现。
例如使⽤log4j就需要在调⽤mybatis⽅法前,先执⾏代码:
[java]
1. org.apache.ibatis.logging.LogFactory.useLog4JLogging();
上⾯这是⼀种解决办法,但是有些情况你不知道何时执⾏这个⽅法。
mybatis还提供了另外⼀种(推荐使⽤这种)解决⽅法,继续看下⾯。
另⼀种解决为,在l配置⽂件中:
[html]
1. <configuration>
2. <settings>
3. <setting name="logImpl"value="LOG4J"/>
稻城亚丁4. </settings>
5. </configuration>
这⾥只写了关键的⼀部分配置信息,在你⾃⼰配置的基础上增加 <setting name="logImpl" value="LOG4J"/> 即可。这样⼀来log4j的配置信息就会起作⽤。
参数说明:
Mybatis对Log4j的配置⽀持:
Logging Configuration
MyBatis可以对包、类、命名空间和全限定的语句记录⽇志。
具体怎么做,视使⽤的⽇志框架⽽定,这⾥以Log4J为例。配置⽇志功能⾮常简单:添加⼏个配置⽂件, 如log4j.properties,再增加个jar 包,如log4j.jar。下⾯是具体的例⼦,共两个步骤:
步骤1: 增加Log4J jar包
因为采⽤Log4J,要确保在应⽤中对应的jar包是可⽤的。要满⾜这⼀点,只要将jar包添加到应⽤的classpath中即可。 Log4J的jar包可以从上⽅的链接下载。
具体⽽⾔,对于web或企业应⽤,需要将log4j.jar 添加到WEB-INF/lib ⽬录; 对于独⽴应⽤, 可以将它添加到jvm的-classpath启动参数中。
步骤2:配置Log4J
配置Log4J⽐较简单, ⽐如需要记录这个mapper接⼝的⽇志:
[java]
1. ample;
2. public interface BlogMapper {
3. @Select("SELECT * FROM blog WHERE id = #{id}")
4.  Blog selectBlog(int id);
5. }
只要在应⽤的classpath中创建⼀个名称为log4j.properties的⽂件, ⽂件的具体内容如下:
[plain]
1. # Global logging configuration
2. Logger=ERROR, stdout
3. # MyBatis
4. ample.BlogMapper=TRACE
h5开发app用什么框架5. #
6. log4j.appender.stdout=org.apache.log4j.ConsoleAppender
7. log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
8. log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
添加以上配置后,Log4J就会把 ample.BlogMapper 的详细执⾏⽇志记录下来,对于应⽤中的其它类则仅仅记录错误信息。
也可以将⽇志从整个mapper接⼝级别调整到到语句级别,从⽽实现更细粒度的控制。如下配置只记录 selectBlog 语句的⽇志:[plain]mysql语句的执行顺序
1. ample.BlogMapper.selectBlog=TRACE
与此相对,可以对⼀组mapper接⼝记录⽇志,只要对mapper接⼝所在的包开启⽇志功能即可:
[plain]
1. ample=TRACE
某些查询可能会返回⼤量的数据,只想记录其执⾏的SQL语句该怎么办?为此,Mybatis中SQL语 句的⽇志级别被设为DEBUG(JDK Logging中为FINE),结果⽇志的级别为TRACE(JDK Logging中为FINER)。所以,只要将⽇志级别调整为DEBUG即可达到⽬的:
[plain]
1. ample=DEBUG
要记录⽇志的是类似下⾯的mapper⽂件⽽不是mapper接⼝⼜该怎么呢?
[html]
1. <?xml version="1.0"encoding="UTF-8"?>
2. <!DOCTYPE mapper
3.  PUBLIC "-////DTD Mapper 3.0//EN"
oracle查看触发器语句4.  "/dtd/mybatis-3-mapper.dtd">
5. <mapper namespace="ample.BlogMapper">
6. <select id="selectBlog"resultType="Blog">
7.    select * from Blog where id = #{id}
8. </select>
9. </mapper>
对这个⽂件记录⽇志,只要对命名空间增加⽇志记录功能即可:
[plain]
1. ample.BlogMapper=TRACE
进⼀步,要记录具体语句的⽇志可以这样做:
什么是常量元素和微量元素
[plain]
1. ample.BlogMapper.selectBlog=TRACE
看到了把,两种配置没差别!
配置⽂件log4j.properties的余下内容是针对⽇志格式的,这⼀内容已经超出本 ⽂档范围。关于Log4J的更多内容,可以参考Log4J的⽹站。不过,可以简单试⼀下看看,不同的配置 会产⽣什么不⼀样的效果。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。