【0】README

1)本文全文总结于 http://www.mybatis.org/mybatis-3/zh/logging.html

2)Mybatis内置的日志工厂提供日志功能,具体的日志实现有以下几种工具:

  • SLF4J
  • Apache Commons Logging
  • Log4j 2
  • Log4j
  • JDK logging

3)具体选择哪个日志实现工具由MyBatis的内置日志工厂确定。它会使用最先找到的(按上文列举的顺序查找)。 如果一个都未找到,日志功能就会被禁用。(干货—— 如果一个都未找到,日志功能就会被禁用)

【1】Logging

1)problem+solutions:

1.1)problem:不少应用服务器的classpath中已经包含Commons Logging,如Tomcat和WebShpere, 所以MyBatis会把它作为具体的日志实现。记住这点非常重要。这将意味着,在诸如 WebSphere的环境中——WebSphere提供了Commons Logging的私有实现,你的Log4J配置将被忽略。(因Commons Logging已经存 在了,按照优先级顺序,Log4J自然就被忽略了)

1.2)solutions:如果你的应用部署在一个包含Commons Logging的环境, 而你又想用其他的日志框架,你可以通过在MyBatis的配置文件mybatis-config.xml里面添加一项setting(配置)来选择一个不同的日志实现。

<configuration><settings>...<setting name="logImpl" value="LOG4J"/>...</settings>
</configuration><span style="color: rgb(0, 0, 0); font-size: 18px; font-family: Monaco, Menlo, Consolas, 'Courier New', monospace; line-height: 24px; background-color: inherit;">      </span>

对以上代码的分析(Analysis):

A1) logImpl可选的值有:SLF4J、LOG4J、LOG4J2、JDK_LOGGING、COMMONS_LOGGING、STDOUT_LOGGING、NO_LOGGING 或者是实现了接口org.apache.ibatis.logging.Log的类的完全限定类名, 并且这个类的构造函数需要是以一个字符串(String类型)为参数的。

A2)你根据需要调用如下的某一方法:

org.apache.ibatis.logging.LogFactory.useSlf4jLogging();
org.apache.ibatis.logging.LogFactory.useLog4JLogging();
org.apache.ibatis.logging.LogFactory.useJdkLogging();
org.apache.ibatis.logging.LogFactory.useCommonsLogging();
org.apache.ibatis.logging.LogFactory.useStdOutLogging();

Attention) 如果的确需要调用以上的某个方法,请在其他所有MyBatis方法之前调用它。另外,只有在相应日志实现中存在 的前提下,调用对应的方法才是有意义的,否则MyBatis一概忽略。如你环境中并不存在Log4J,你却调用了 相应的方法,MyBatis就会忽略这一调用,代之默认的查找顺序查找日志实现。

【2】Logging Configuration

1)intro: MyBatis可以对包、类、命名空间和全限定的语句记录日志。(干货——MyBatis可以对包、类、命名空间和全限定的语句记录日志)
2)如何配置日志
step1)添加 Log4J 的 jar 包: 因为采用Log4J,要确保在应用中对应的jar包是可用的。要满足这一点,只要将jar包添加到应用的classpath中即可。 Log4J的jar包可以从上面的链接中下载。具体而言,对于web或企业应用,需要将log4j.jar 添加到WEB-INF/lib 目录; 对于独立应用, 可以将它添加到jvm的 -classpath启动参数中。
step2)配置Log4J: 配置Log4J比较简单, 比如需要记录这个mapper接口的日志:
package org.mybatis.example;
public interface BlogMapper {@Select("SELECT * FROM blog WHERE id = #{id}")Blog selectBlog(int id);
}

step2.1)只要在应用的classpath中创建一个名称为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

对以上代码的 分析(Analysis):添加以上配置后,Log4J就会把 org.mybatis.example.BlogMapper 的详细执行日志记录下来,对于应用中的其它类则仅仅记录错误信息。(干货——以上分析的是 MyBatis 对 类级别的日志记录配置)
【2.1】对语句级别记录日志
log4j.logger.org.mybatis.example.BlogMapper.selectBlog=TRACE
【2.2】对包级别记录日志
log4j.logger.org.mybatis.example=TRACE
【3】问题
1)problem+solutions:
1.1)problem:某些查询可能会返回大量的数据,只想记录其执行的SQL语句该怎么办?
1.2)solutions:为此,Mybatis中SQL语 句的日志级别被设为DEBUG(JDK Logging中为FINE),结果日志的级别为TRACE(JDK Logging中为FINER)。所以,只要将日志级别调整为DEBUG即可达到目的:
log4j.logger.org.mybatis.example=DEBUG


2)problem+solutions:
2.1)problem:要记录日志的是类似下面的mapper文件而不是mapper接口又该怎么呢?
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//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>

2.2)solutions:对这个文件记录日志,只要对命名空间增加日志记录功能即可:
log4j.logger.org.mybatis.example.BlogMapper=TRACE

2.3)solutions: 进一步,要记录具体语句的日志可以这样做:
log4j.logger.org.mybatis.example.BlogMapper.selectBlog=TRACE

Conclusion) 看到了吧,两种配置没差别! 配置文件log4j.properties的余下内容是针对日志格式的,这一内容已经超出本 文档范围。关于Log4J的更多内容,可以参考Log4J的网站。

mybatis_user_guide(8) 日志相关推荐

  1. python的日志库logging,真香!!!

    学习资源 Python之日志处理(logging模块) python之配置日志的几种方式 logging 官方高级用法 使用方法 LOG_FORMAT = "%(asctime)-15s - ...

  2. Docker学习(五)-----Docker查看日志

    八.Docker查看日志 docker logs 容器名称/ID docker logs -f -t --since="2018-12-1" --tail=10 qfjy_exam ...

  3. Springboot 利用AOP编程实现切面日志

    前言 踏入Springboot这个坑,你就别想再跳出来.这个自动配置确实是非常地舒服,帮助我们减少了很多的工作.使得编写业务代码的时间占比相对更大.那么这里就讲一下面向切面的日志收集.笔者使用lomb ...

  4. 【Springboot】日志

    springBoot日志 1.目前市面上的日志框架: 日志门面 (日志的抽象层):                JCL(Jakarta Commons Logging)                ...

  5. log4j屏蔽掉某个包下的log日志打印

    在log4j的配置文件下配置 ## Disable other log log4j.logger.com.summaryday.framework.db=OFF log4j定义了8个级别的log(除去 ...

  6. SpringBoot集成AOP管理日志

    写在前面 如何将所有的通过url的请求参数以及返回结果都输出到日志中? 如果在controller的类中每个方法名都写一个log输出肯定是不明智的选择.使用Spring的AOP功能即可完成. AOP ...

  7. 日志处理logger

    20220127 https://mp.weixin.qq.com/s/CgmfVqogqKBzezmIR7ZfsQ https://blog.csdn.net/kyle1314608/article ...

  8. 2021年大数据ELK(二十二):采集Apache Web服务器日志

    全网最详细的大数据ELK文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 采集Apache Web服务器日志 一.需求 二.准备日志数据 三.使用Fil ...

  9. 2021年大数据ELK(十九):使用FileBeat采集Kafka日志到Elasticsearch

    全网最详细的大数据ELK文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 使用FileBeat采集Kafka日志到Elasticsearch 一.需求分 ...

最新文章

  1. 实时计算Flink 产品定价——续费和变配
  2. Microsoft Office企业项目管理(EPM)解决方案
  3. 分析 Go time.After 引起内存暴增 OOM 问题
  4. php解析url的三种方法举例
  5. Hadoop HIVE 基本数据类型
  6. 【软考2】Java语言的基本知识汇总
  7. .NET利用委托实现动态查询
  8. 系统学习NLP(十八)--文本分类概述
  9. ES6阮一峰读书笔记第三章字符串的拓展
  10. xsmax是大黑边?_苹果iPhone11和xsmax,8p x xr xs怎么选?干货分享!
  11. 银河麒麟系统PDF转Word
  12. VB制作的“小小莫扎特五线谱助记软件”
  13. SQL学习笔记:服务端配置-如何使用企业管理器
  14. 决策树及决策树生成与剪枝
  15. 快速开发一个h5游戏
  16. win10 CMD大全
  17. 你的“电动爹”,国庆又又又趴窝了吗
  18. JAVA接口设计篇:这些都不知道,别说你懂接口设计
  19. 掩码认证消息(MAM)详细介绍
  20. 51NOD - 1830路径交

热门文章

  1. Codeforces Round #636 (Div. 3) D. Constant Palindrome Sum 思维 + 差分
  2. CF1526 D. Kill Anton
  3. [HEOI2013] SAO(dp + 组合数 + 前缀和)
  4. 【学习笔记】Miller-Rabin(米勒-拉宾)素性测试,附常用表
  5. [TJOI2018]智力竞赛 (匈牙利)
  6. 【CF 1188 A1,B,C】Add on a Tree // Count Pairs // Array Beauty
  7. P6624-[省选联考2020A卷]作业题【矩阵树定理,欧拉反演】
  8. P6047-丝之割【斜率优化,dp】
  9. jzoj3501-消息传递【换根法,树形dp】
  10. Ch5501-环路运输【环形处理dp】