log4j打印mybatis执行sql,将占位符换成真实的参数输出
背景:
- <span style="white-space:pre;"> </span><!-- log4j 日志 -->
- <dependency>
- <groupId>log4j</groupId>
- <artifactId>log4j</artifactId>
- <version>${log4j-version}</version>
- </dependency>
- <span style="white-space:pre;"> </span><settings>
- <setting name="logImpl" value="LOG4J" />
- </settings>
3、添加logj4j.properties文件
- #logFile
- log4j.rootLogger=DEBUG,Console
- #Console
- log4j.appender.Console=org.apache.log4j.ConsoleAppender
- log4j.appender.console.Threshold=INFO
- log4j.appender.console.ImmediateFlush=true
- log4j.appender.Console.Target=System.out
- log4j.appender.Console.layout=org.apache.log4j.PatternLayout
- log4j.appender.Console.layout.ConversionPattern=%-5p %d{yyyy-MM-dd HH:mm:ss}[%t] %l: %x%m%n
- # 日志文件(logFile)
- log4j.appender.logFile=org.apache.log4j.FileAppender
- log4j.appender.logFile.Threshold=DEBUG
- # 立即输出
- #log4j.appender.logFile.ImmediateFlush=true
- #log4j.appender.logFile.Append=true
- #log4j.appender.logFile.File=D:/logs/log.log4j
- #log4j.appender.logFile.layout=org.apache.log4j.PatternLayout
- #log4j.appender.logFile.layout.ConversionPattern=%-5p %d{yyyy-MM-dd HH:mm:ss}[%t] %l: %x%m%n
- log4j.logger.org.apache=ERROR
- log4j.logger.org.mybatis=ERROR
- log4j.logger.org.springframework=ERROR
- #这个需要
- log4j.logger.log4jdbc.debug=ERROR
- log4j.logger.jdbc.audit=ERROR
- log4j.logger.jdbc.resultset=ERROR
- #这个打印SQL语句非常重要
- log4j.logger.jdbc.sqlonly=DEBUG
- log4j.logger.jdbc.sqltiming=ERROR
- log4j.logger.jdbc.connection=FATAL
4、测试结果
- ==> Preparing: select u.id as id ,u.name as name , u.pwd as pwd from user u where u.pwd = ? and u.id = ?;
- ==> Parameters: 123(String), 1(String)
- <== Total: 0
显然:参数和sql是分离的,现在要实现将参数嵌套进sql中,实现上面的想法
- protected void debug(String text, boolean input) {
- if (statementLog.isDebugEnabled()) {
- statementLog.debug(prefix(input) + text);
- }
- }
目前的这个是BaseJdbcLogger.debug的源码,其中(text:是需要打印的文本,input:表示前面的“==>”的方向)
- /* 打印的sql */
- private static String sql = "";
- protected void debug(String text, boolean input) {
- text = text.trim();
- if (statementLog.isDebugEnabled()) {
- if(text.startsWith("Preparing:")){
- sql = text.substring(text.indexOf(":")+1);
- return ;
- }
- if(text.startsWith("Parameters:")){
- String temp = text.substring(text.indexOf(":")+1);
- String[] split = temp.split(",");
- if(split != null & split.length > 0){
- for (String string2 : split) {
- String s = string2.trim();
- sql = sql.replaceFirst("\\?", s.substring(0, s.indexOf("(")));
- }
- }
- text = "Preparing:"+ sql ;
- sql = "";
- }
- statementLog.debug(prefix(input) + text);
- }
- }
最终输出结果:
- ==> Preparing: select u.id as id ,u.name as name , u.pwd as pwd from user u where u.pwd = 123 and u.id = 1;
- <== Total: 0
到到最终目的
log4j打印mybatis执行sql,将占位符换成真实的参数输出的更多相关文章
- mybatis + log4j 打印mybatis的sql
项目中使用log4j管理日志,同时使用了mybatis 在log4j中rootLogger级别是info的情况下正常是不会打印sql出来的,这个时候设置如下: log4j.rootLogger=inf ...
- log4j打印MyBatis的sql语句配置
log4j.rootLogger=DEBUG,stdout log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender. ...
- log4j打印mybatis sql语句
Mybatis默认使用有slf4j 必须加上依赖 <dependency> <groupId>org.slf4j</groupId> <artifactId& ...
- linux 的sed命令解释 sed ':t;N;s/\n/,/;b t' 将换行符换成逗号
linux 的sed命令解释 sed ':t;N;s/\n/,/;b t' 将换行符换成逗号 实现的功能是吧换行符换成逗号了,自己试验过. 求解释,:t N b t 都是什么意思??? :t 定义la ...
- log4j配置打印mybatis的sql到控制台(复制)
log4j.rootLogger=DEBUG, stdout log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender ...
- Mybatis执行SQL的流程
前篇:Mybatis初始化过程 SqlSession : SqlSession是一个接口,它有两个实现类:DefaultSqlSession (默认)和 SqlSessionManager (弃用,不 ...
- Mybatis执行sql(insert、update、delete)返回值问题
数据库:Mysql 在使用mybatis的过程中对执行sql的返回值产生疑问,顺手记录一下. 结论: insert: 插入n条记录,返回影响行数n.(n>=1,n为0时实际为插入失败) up ...
- 在mybatis执行SQL语句之前进行拦击处理
转载自:http://blog.csdn.net/hfmbook/article/details/41985853 比较适用于在分页时候进行拦截.对分页的SQL语句通过封装处理,处理成不同的分页sql ...
- 如何让SpringBoot工程在log/控制台中实时打印MyBatis执行的SQL语句
工程下载:https://files.cnblogs.com/files/xiandedanteng/gatling20200429-4.zip 其实就是一句话设置的事情,实现步骤: 在applica ...
随机推荐
- PIL.Image与Base64 String的互相转换
https://www.jianshu.com/p/2ff8e6f98257 PIL.Image与Base64 String的互相转换 mona_alwyn 2018.01.18 19:02* 字数 ...
- Mysql解压版配置环境等
背景故事:安装版的mysql和我的本本有仇,最后一步老卡死 1.首先先把下载好的压缩包解压,如下图:
- 在线修改Schema
1. mysql5.5 或者 Mariadb 5.5 之前不需要将数据表中的所有记录复制到临时数据表的操作: a. 修改列名 b. 修改数值类型表示的长度(由INT(2)变成INT(3 ...
- 016PHP基础知识——流程控制(四)
<?php /** * 流程控制(四) do...while * do{ 代码段 * }while(){ * } * 特点:最少会执行一次代码段 */ /*$i=5; do{ echo $i; ...
- rsync的服务启动脚本
#!/bin/bash #author:Mr.chen # chkconfig: # description:This is Rsync service management shell script ...
- WordCount-个人项目2
我的这个WC程序实现了对txt文件中的数据的计数,算出程序中有多少单词.字符数.行数还有空格数.以及长度. 项目源代码参考:http://www.cnblogs.com/sunbuqiao/p/531 ...
- 关于TCP/IP协议
TCP的特点: TCP是面向连接的传输层协议 TCP的传输是可靠传输 TCP是全双工的通信 TCP的连接是点对点的传输 TCP和UDP的区别 tcp是面向连接的,两台主机的通信之前必须通过三次握手建立 ...
- MoreEffectiveC++Item35 条款25 将constructor和non-member functions虚化
1.virtual constructor 在语法上是不可将构造函数声明成虚函数,虚函数用于实现"因类型而异的行为",也就是根据指针或引用所绑定对象的动态类型而调用不同实体.现在所 ...
- WIFI 基础知识
转载自:wifi基本知识 如侵犯您的版权,请联系:2378264731@qq.com 1. IE802.11简介 标准号 IEEE 802.11b IEEE 802.11a IEEE 802.11g ...
- 随想录(kgdb的基本原理)
[ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 在linux kernel调试的时候,有一种很方便的调试方法,那就是kgdb.kgdb的本质,就 ...