1. log4j.rootLogger=DEBUG, stdout
  2. log4j.appender.stdout=org.apache.log4j.ConsoleAppender
  3. log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
  4. log4j.appender.stdout.layout.ConversionPattern=[service] %d - %c -%-4r [%t] %-5p %c %x - %m%n
  5. #log4j.appender.R=org.apache.log4j.DailyRollingFileAppender
  6. #log4j.appender.R.File=../logs/service.log
  7. #log4j.appender.R.layout=org.apache.log4j.PatternLayout
  8. #log4j.appender.R.layout.ConversionPattern=[service] %d - %c -%-4r [%t] %-5p %c %x - %m%n
  9. #log4j.logger.com.ibatis = debug
  10. #log4j.logger.com.ibatis.common.jdbc.SimpleDataSource = debug
  11. #log4j.logger.com.ibatis.common.jdbc.ScriptRunner = debug
  12. #log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate = debug
  13. #log4j.logger.java.sql.Connection = debug
  14. log4j.logger.java.sql.Statement = debug
  15. log4j.logger.java.sql.PreparedStatement = debug
  16. log4j.logger.java.sql.ResultSet =debug

在开发的过程中为了能够显示sql语句以此来跟踪mybatis的的操作,虽然网络上的配置都是轻轻的一句话概括之,但是按照他们的方法一一试之,都是毫无效果,各种煎熬相比遇到相似问题的同仁应该有此感受。为了让大家能够少走弯路,现将自己的心得分享给大家。欢迎交流

我们现在分几种情况处理:

1、此种情况只出现mybatis使用,无其他的包介入(如spring等,因为有些包会引入其他的日志系统,会造成干扰,稍后讲解)

  1. <dependency>
  2. <groupId>log4j</groupId>
  3. <artifactId>log4j</artifactId>
  4. <version>1.2.17</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>org.slf4j</groupId>
  8. <artifactId>slf4j-log4j12</artifactId>
  9. <version>1.7.21</version>
  10. </dependency>
  11. <dependency>
  12. <groupId>org.slf4j</groupId>
  13. <artifactId>slf4j-api</artifactId>
  14. <version>1.7.21</version>
  15. </dependency>
  16. 1、单独开放第三个无法打印sql语句
  17. 2、第一种和第三种无法打印sql语句
  18. 3、其他情况都可以打印出sql语句
  19. 4、最后得出的结论可能是版本冲突的问题
  1. 总而言之
  2. 1、没有slf4j,只要log4j即可
  3. 2、有slf4j,则必须要有slf4j-log4j12,其他的可有可无

此时可以配置log4j.properties和log4j.xml均可以实现

如:log4j.properties

  1. log4j.rootLogger=DEBUG, stdout
  2. log4j.appender.stdout=org.apache.log4j.ConsoleAppender
  3. log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
  4. log4j.appender.stdout.layout.ConversionPattern=[service] %d - %c -%-4r [%t] %-5p %c %x - %m%n
  5. #log4j.appender.R=org.apache.log4j.DailyRollingFileAppender
  6. #log4j.appender.R.File=../logs/service.log
  7. #log4j.appender.R.layout=org.apache.log4j.PatternLayout
  8. #log4j.appender.R.layout.ConversionPattern=[service] %d - %c -%-4r [%t] %-5p %c %x - %m%n
  9. #log4j.logger.com.ibatis = debug
  10. #log4j.logger.com.ibatis.common.jdbc.SimpleDataSource = debug
  11. #log4j.logger.com.ibatis.common.jdbc.ScriptRunner = debug
  12. #log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate = debug
  13. #log4j.logger.java.sql.Connection = debug
  14. log4j.logger.java.sql.Statement = debug
  15. log4j.logger.java.sql.PreparedStatement = debug
  16. log4j.logger.java.sql.ResultSet =debug

2、mybatis和其他架构包混用,

最头痛的就是这种,试了很多种办法,最后才校验出一种合适的办法。就是一定要用log4j.xml配置

配置如下:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
  3. <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"
  4. debug="false">
  5. <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
  6. <layout class="org.apache.log4j.PatternLayout">
  7. <param name="ConversionPattern" value="[%d{dd/MM/yy hh:mm:ss:sss z}] %5p %c{2}: %m%n" />
  8. </layout>
  9. </appender>
  10. <!--     <appender name="FILE" class="org.apache.log4j.RollingFileAppender"> -->
  11. <!--         <param name="file" value="${user.home}/foss-framework.log" /> -->
  12. <!--         <param name="append" value="true" /> -->
  13. <!--         <param name="maxFileSize" value="10MB" /> -->
  14. <!--         <param name="maxBackupIndex" value="100" /> -->
  15. <!--         <layout class="org.apache.log4j.PatternLayout"> -->
  16. <!--             <param name="ConversionPattern" value="%d [%t] %-5p %C{6} (%F:%L) - %m%n" /> -->
  17. <!--         </layout> -->
  18. <!--     </appender> -->
  19. <!--     <appender name="framework" -->
  20. <!--         class="com.deppon.foss.framework.server.components.logger.BufferedAppender"> -->
  21. <!--         <layout class="org.apache.log4j.PatternLayout"> -->
  22. <!--             <param name="ConversionPattern" value="[%d{dd/MM/yy hh:mm:ss:sss z}] %5p %c{2}: %m%n" /> -->
  23. <!--         </layout> -->
  24. <!--     </appender> -->
  25. <!-- 下面是打印 mybatis语句的配置 -->
  26. <logger name="com.ibatis" additivity="true">
  27. <level value="DEBUG" />
  28. </logger>
  29. <logger name="java.sql.Connection" additivity="true">
  30. <level value="DEBUG" />
  31. </logger>
  32. <logger name="java.sql.Statement" additivity="true">
  33. <level value="DEBUG" />
  34. </logger>
  35. <logger name="java.sql.PreparedStatement" additivity="true">
  36. <level value="DEBUG" />
  37. </logger>
  38. <logger name="java.sql.ResultSet" additivity="true">
  39. <level value="DEBUG" />
  40. </logger>
  41. <root>
  42. <level value="DEBUG" />
  43. <appender-ref ref="CONSOLE" />
  44. <!--         <appender-ref ref="FILE" /> -->
  45. <!--         <appender-ref ref="framework" /> -->
  46. </root>
  47. </log4j:configuration>

好的能够打印出sql语句啦,成功啦!

  1. [24/07/16 03:49:25:025 CST] DEBUG spring.SqlSessionUtils: Creating a new SqlSession
  2. [24/07/16 03:49:25:025 CST] DEBUG spring.SqlSessionUtils: SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5a90d465] was not registered for synchronization because synchronization is not active
  3. [24/07/16 03:49:25:025 CST] DEBUG datasource.DataSourceUtils: Fetching JDBC Connection from DataSource
  4. [24/07/16 03:49:25:025 CST] DEBUG datasource.DriverManagerDataSource: Creating new JDBC DriverManager Connection to [jdbc:mysql://localhost:3307/security_db?useUnicode=true&characterEncoding=utf-8]
  5. [24/07/16 03:49:25:025 CST] DEBUG transaction.SpringManagedTransaction: JDBC Connection [com.mysql.jdbc.JDBC4Connection@51e19e59] will not be managed by Spring
  6. [24/07/16 03:49:25:025 CST] DEBUG UserMapper.getUserNum: ==>  Preparing: select COUNT(DISTINCT(user.id)) as total_num from user, user_roles where user.id = user_roles.User_id
  7. [24/07/16 03:49:25:025 CST] DEBUG UserMapper.getUserNum: ==> Parameters:
  8. [24/07/16 03:49:25:025 CST] DEBUG UserMapper.getUserNum: <==      Total: 1

补充:有兴趣的同学可以试验下

自定义MyBatis 日志

MyBatis使用其内部LoggerFactory作为真正的日志类库使用的门面。其内部的LaggerFactory会将日志记录任务委托给如下的所示某一个日志实现,日志记录优先级由上到下顺序递减:

  • l  SLF4J
  • l  ApacheCommons Logging
  • l  Log4j2
  • l  Log4j
  • l  JDKlogging

如果MyBatis未发现上述日志记录实现,则MyBatis的日志记录功能无效。

如果你的运行环境中,在classpath中有多个可用的日志类库,并且你希望MyBaits使用某个特定的日志实现,你可以通过调用以下其中一个方法:

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

log4j配置打印mybatis的sql到控制台(复制)的更多相关文章

  1. 006-springboot2.0.4 配置log4j2,以及打印mybatis的sql

    一.pom配置 普通项目 <!-- log4j2 --> <dependency> <groupId>org.apache.logging.log4j</gr ...

  2. log4j打印mybatis执行sql,将占位符换成真实的参数输出

    背景: 在我日常码代码的时候,由于对mybatis的动态sql,比较依赖,并且有时候需求复杂,导致sql较长,而且参数众多,当出现问题是,需要将sql,放到navicat里面去执行查看结果,但是对于复 ...

  3. log4j打印MyBatis的sql语句配置

    log4j.rootLogger=DEBUG,stdout log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender. ...

  4. SMM+maven下的log4j配置打印sql

    1加入依赖包 <!--LOG4日志 start --> <dependency> <groupId>org.slf4j</groupId> <ar ...

  5. mybatis + log4j 打印mybatis的sql

    项目中使用log4j管理日志,同时使用了mybatis 在log4j中rootLogger级别是info的情况下正常是不会打印sql出来的,这个时候设置如下: log4j.rootLogger=inf ...

  6. springboot2.0---控制台打印Mybatis的SQL记录

    题记:每次使用mybatis出错,都不知道sql原因,debug也不出结果,索性将其打印出来,更加容易排错. 亲测有效,只需要将下面的logback.xml放置在resource目录下即可打印. 方式 ...

  7. 【spring boot】【log4jdbc】使用log4jdbc打印mybatis的sql和Jpa的sql语句运行情况

    在spring boot 中使用mybatis 想看到sql语句的运行情况. 虽然按照 之前说的配置了 logging.level.你的mapper包位置 = debug 但是依旧没有起作用. 所以采 ...

  8. 解决logback不打印mybatis的SQL日志的问题

    工作这么多年,今天还是因为Logback的这个问题稍微卡了一下,惭愧. 问题描述: logback配置了如下信息: <appender name="sql" class=&q ...

  9. log4j 不输出mybatis的sql

    有可能导入多个日志工具jar,导致mybatis不知道使用哪种日志.修改你的mybatis配置,添加setting,指定日志类型为log4j. <configuration> <!- ...

随机推荐

  1. MAC下查看环境变量的值的方法

    方法很简单,用到的命令是:echo. env : 查看所有的环境变量 方法:启动终端->输入 echo + 环境变量名, 回车,即可看到边聊的值. 例如:echo $JAVA_HOME

  2. Design and Implementation of Global Path Planning System for Unmanned Surface Vehicle among Multiple Task Points

    Design and Implementation of Global Path Planning System for Unmanned Surface Vehicle among Multiple ...

  3. svn update 时总是提示 Password for '默认密钥' GNOME keyring: 输入密码

    执行svn update 时 总是提示输入密码. $ cd ~/.gnome2/keyrings/ $ ls $ rm 默认密钥.keyring

  4. HTTP请求与服务器响应流程

    1. HTTP 简介 1.1定义 1.2 请求/响应报文格式 1.3请求方式--GET/POST     状态码 1.4 响应状态 2. HTTP请求,浏览器做了什么, 服务端处理解析过程 1:HTT ...

  5. shell脚本结构化语句

    本文中记录一下shell中的两种循环语句:for和while for循环 for循环是linux shell中最常用的结构,for循环有三种结构:1.列表for循环.2.不带列表for循环.3.C风格 ...

  6. 如何设置 html 中 select 标签不可编辑、只读

    转载自: https://blog.csdn.net/hjm4702192/article/details/33729767 1. <select style="width:195px ...

  7. (转)Unity 和 Cocos2d-x 越渐流行,国内公司开发「自研游戏引擎」的意义何在?

    分几个角度来说:一.我认为,Unity3D将无可挽回的,或者说,势在必得的,成为接下来很多年内,世界移动领域游戏引擎市场霸主.回顾历史,正如同咱们经历过一次又一次的互联网时代变革一样,x86,wind ...

  8. JavaSE 第二次学习随笔(一)

    Java是一种区分大小写的强类型准动态语言 动态语言,是指程序在运行时可以改变其结构:新的函数可以被引进,已有的函数可以被删除等在结构上的变化,类型的检查是在运行时做的,优点为方便阅读,清晰明了,缺点 ...

  9. Java基础——对象和类

    将包含main方法的类称为主类. 变量的作用域是指变量可以在程序中引用的范围. 实例变量和静态变量的作用域是整个类,无论变量是在哪里声明的. 局部变量的声明和使用都在一个方法的内部. 一个类的实例变量 ...

  10. Codeforces Round #458C DP

    C. Travelling Salesman and Special Numbers time limit per test 1 second memory limit per test 256 me ...