您当前的位置:首页 > 电脑百科 > 数据库 > 百科

Mybatis打印SQL日志

时间:2020-07-08 10:22:03  来源:  作者:

1.支持日志框架

MyBatis支持使用多种日志框架来打印sql,包括:slf4j、commons-logging、log4j、log4j2、jdk logging、stdout、no logging等。因此在打印日志时,我们首要确定自己使用的日志框架是什么,然后进行相应的配置。

默认情况下,mybatis按照如下方式检测需要使用的日志框架实现:

slf4j-->commons-logging-->log4j2-->log4j-->jdk logging(jul)-->no logging

在3.5.5 mybatis的org.Apache.ibatis.logging.LogFactory类的源码中体现:

Mybatis打印SQL日志

mybatis日志工厂

其中slf4j,commons-logging都是facade设计模式的实现,底层需要依赖具体的日志框架,如log4j、log4j2、logback等。并且还要引入相应的桥接jar包依赖。

对于日志框架jar包依赖缺少或者冲突的情况,mybatis提供了一个终极解决方案,通过logImpl配置来强制指定使用哪个日志框架,使用方式如下所示:

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

logImpl的取值范围:SLF4J | LOG4J | LOG4J2 | JDK_LOGGING | COMMONS_LOGGING | STDOUT_LOGGING | NO_LOGGING

其中,STDOUT_LOGGING表示打印日志到控制台。NO_LOGGING表示不打印日志。

下面这张图列表出了slf4j在和各种底层日志框架如何整合,以及相应的需要引入的桥接jar包,详见slf4j官网:http://www.slf4j.org/manual.html

Mybatis打印SQL日志

slf4j日志框架整合

2.打印日志案例

本案例以log4jdbc + log4j来打印mybatis日志。

pom.xml引入以下依赖:

        <!--log4jdbc-->
        <dependency>
            <groupId>org.bgee.log4jdbc-log4j2</groupId>
            <artifactId>log4jdbc-log4j2-jdbc4.1</artifactId>
            <version>1.16</version>
        </dependency>
        <!--slf4j-->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.30</version>
        </dependency>
        <!--桥接,依赖log4j坐标-->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.30</version>
        </dependency>

mybatis-config.xml添加日志配置:

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

jdbc.properties进行数据库连接配置:

jdbc.driver=net.sf.log4jdbc.sql.jdbcapi.DriverSpy
jdbc.url=jdbc:log4jdbc:MySQL://127.0.0.1:3306/cms?useUnicode=true&characterEncoding=utf8&useSSL=false
jdbc.username=root
jdbc.password=root

log4j.properties进行日志配置:

log4j.rootLogger=INFO,Console
    
#Console    
log4j.Appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.console.Target=System.out
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
  
log4j.logger.org.apache=ERROR
log4j.logger.org.mybatis=ERROR
log4j.logger.mybatis=DEBUG
log4j.logger.log4jdbc.debug=ERROR
  
log4j.logger.jdbc.audit=ERROR
log4j.logger.jdbc.resultset=OFF
log4j.logger.jdbc.sqlonly=DEBUG
log4j.logger.jdbc.sqltiming=ERROR
log4j.logger.jdbc.connection=FATAL
log4j.logger.jdbc.resultsettable=INFO

log4jdbc.log4j2.properties进行配置:

log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator

junit测试代码如下:

    @Test
    void getList() {
        User user = User.builder().id(1).build();
        List<User> userList = userDao.getList(user);
//        userList.forEach(x -> log.info("===>{}",x));
        assertNotNull(userList);
    }

控制台打印效果如下:

Mybatis打印SQL日志

控制台SQL语句

3.日志最佳实践

一般在生产环境中应用系统,日志级别调整为INFO或者WARN以避免过多的输出日志。但某些时候,需要跟踪具体问题,那么就得打开DEBUG日志。但是如果设置root logger为DEBUG级别,则需要的信息就会淹没在日志的海洋中。

此时,需要单独指定某个或者某些logger(如mybatis打印sql的logger)的日志级别为DEBUG,而root logger保持INFO或WARN不变。



Tags:Mybatis   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
本篇文章主要介绍了使用MyBatis框架完成数据库的增、删、改、查操作。准备工作运行schema.sql和data.sql脚本文件中的 SQL 语句创建t_user表并添加部分测试数据。schema.sql...【详细内容】
2022-07-15  Tags: Mybatis  点击:(0)  评论:(0)  加入收藏
简介MetaObject 是 MyBatis 中的反射工具类,用于获取和设置对象的属性值。示例List<Order> orders = new ArrayList<>(2);orders.add(new Order("1", "001", "美的电压力锅")...【详细内容】
2022-07-06  Tags: Mybatis  点击:(18)  评论:(0)  加入收藏
简介SqlRunner,一个非常实用的、用于操作数据库的工具类。该类对JDBC进行了很好的封装,结合SQL工具类,能够很方便地通过Java代码执行SQL语句并检索SQL执行结果。SqlRunner提供...【详细内容】
2022-07-05  Tags: Mybatis  点击:(19)  评论:(0)  加入收藏
1. If 语句需求:根据作者名字和博客名字来查询博客!如果作者名字为空,那么只根据博客名字查询,反之,则根据作者名字来查询<!--需求1:根据作者名字和博客名字来查询博客!如果作者名...【详细内容】
2022-06-30  Tags: Mybatis  点击:(25)  评论:(0)  加入收藏
在进行持久层数据维护(新增或修改)的时候,我们通常需要记录一些非业务字段,比如:create_time、update_time、update_by、create_by等用来维护数据记录的创建时间、修改时间、修改...【详细内容】
2022-06-20  Tags: Mybatis  点击:(23)  评论:(0)  加入收藏
Mybatis 是 Java 中一个非常好用的数据库框架,这儿记录一下在使用过程中遇到的坑。官方中文文档地址:http://www.mybatis.org/mybatis-3/zh/getting-started.html1、在Mybatis...【详细内容】
2022-06-20  Tags: Mybatis  点击:(34)  评论:(0)  加入收藏
今天介绍一个 MyBatis - Plus 官方发布的神器:mybatis-mate 为 mp 企业级模块,支持分库分表,数据审计、数据敏感词过滤(AC算法),字段加密,字典回写(数据绑定),数据权限,表结构自动生成...【详细内容】
2022-06-17  Tags: Mybatis  点击:(43)  评论:(0)  加入收藏
1. Mybatis 存在的痛点我们知道 MyBatis 是一个基于 java 的持久层框架,它内部封装了 jdbc,极大提高了我们的开发效率。但是使用 Mybatis 开发也有很多痛点: 每个 Dao 接口都需...【详细内容】
2022-06-14  Tags: Mybatis  点击:(37)  评论:(0)  加入收藏
MybatisPlus是国产的第三方插件, 它封装了许多常用的CURDapi,免去了我们写mapper.xml的重复劳动,这里介绍了基本的整合SpringBoot和基础用法。2|0引入依赖在项目中pom文件引入m...【详细内容】
2022-05-05  Tags: Mybatis  点击:(52)  评论:(0)  加入收藏
一、前言我们在日常开发中经常使用ORM框架,比如Mybatis、tk.Mybatis、Mybatis-Plus。不过最广泛的还是Mybatis-Plus,我们的一些表,都会有创建时间、更新时间、创建人、更新人。...【详细内容】
2022-04-24  Tags: Mybatis  点击:(172)  评论:(0)  加入收藏
▌简易百科推荐
俗话说,天下大势,合久必分、分久必合。数据库领域同样如此。过去五十余年,数据库经历OLTP和OLAP两种需求漫长的融合-分离-再融合的过程。究其原因,数据库的发展始终与用户场景需...【详细内容】
2022-07-14  大数据在线    Tags:HTAP数据库   点击:(4)  评论:(0)  加入收藏
导读:Apache HBase(Hadoop Database),是一个基于Google BigTable论文设计的高可靠性、高性能、可伸缩的分布式存储系统。全文将围绕以下几个方面展开: HBase是什么 HBase社区的发...【详细内容】
2022-07-08  DataFunTalk    Tags:Apache HBase   点击:(10)  评论:(0)  加入收藏
TimescaleDB 超表TimescaleDB 中使用称为 hypertables 的数据表来存储数据。hypertable(超表)是与数据交互的主要点,因为它提供了可以通过标准 SQL 查询的标准表抽象。 在 Time...【详细内容】
2022-07-07  IT职业教育    Tags:TimescaleDB   点击:(19)  评论:(0)  加入收藏
使用like、between、in进行模糊查询select * from Studentswhrere 姓名 like &#39;张%&#39;通配符:_ 一个字符,% 任意长度的字符串,[] 括号中所指定的范围内的一个字符,[^]不在...【详细内容】
2022-07-07  新米米    Tags:数据库   点击:(15)  评论:(0)  加入收藏
oracle经常需要查数据库表空间大小,使用率,加表空间等,这里总结我经常使用的语句。一、数据表空间相关:查询所有表空间的使用情况:SELECT d.tablespace_name "Name", d.status "S...【详细内容】
2022-07-07  运维Danrtsey    Tags:数据表   点击:(15)  评论:(0)  加入收藏
导读:本文将介绍Apache IoTDB,它是一个基于开放数据格式的数据库。今天的介绍会围绕下面四点展开: Apache IoTDB 简介 时序文件格式 TsFile 基于开放文件的数据库架构 开源社区...【详细内容】
2022-07-06  DataFunTalk    Tags:时序数据库   点击:(22)  评论:(0)  加入收藏
一、问题 在好大夫在线内部,S3系统负责各业务方操作日志的集中存储、查询和管理。目前,该系统日均查询量数千万次,插入量数十万次。随着日志量的不断累积,主表已经达到数十亿,单...【详细内容】
2022-07-05  dbaplus社群    Tags:MongoDB   点击:(16)  评论:(0)  加入收藏
文丨刘雨琦马云曾说,数据是当下“最贵”的资产,若阿里巴巴不搞云计算,可能就会死掉。而数据库作为整个数据行业的基础软件,正在迎来它的春天。国产数据库的接连上市,为信创风口...【详细内容】
2022-07-05  光锥智能    Tags:数据库   点击:(20)  评论:(0)  加入收藏
导读:埋点数据是数据分析、推荐、运营的基础,低延时、稳定、高效的埋点数据流对提高用户体验有着非常重要的作用。而随着流量的增大,埋点的增多,在大流量场景下,埋点数据流的建设...【详细内容】
2022-07-05  DataFunTalk    Tags:数据   点击:(22)  评论:(0)  加入收藏
作为轻量级的本地存储方式,对于构建不依赖服务器的小型项目,用LowDB存储和管理数据是十分理想的选择。在Nodejs, Electron and browser等一些小型项目中经常能看到LowDB的身影...【详细内容】
2022-07-04    效能哥  Tags:数据库   点击:(30)  评论:(0)  加入收藏
站内最新
站内热门
站内头条