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 ...
随机推荐
- 【BZOJ1061】【NOI2008】志愿者招募
[BZOJ1061][NOI2008]志愿者招募 题面 BZOJ 题解 我们设每类志愿者分别招募了\(B[i]\)个 那么,我们可以得到一系列的方程 \[\sum_{S[i]\leq x\leq T[ ...
- 《深入理解mybatis原理6》 MyBatis的一级缓存实现详解 及使用注意事项
<深入理解mybatis原理> MyBatis的一级缓存实现详解 及使用注意事项 0.写在前面 MyBatis是一个简单,小巧但功能非常强大的ORM开源框架,它的功能强大也体现在它的缓 ...
- Ansible 小手册系列 十九(常见指令表)
Play 指令 说明 accelerate 开启加速模式 accelerate_ipv6 是否开启ipv6 accelerate_port 加速模式的端口 always_run any_error ...
- 008-对象—— 对象$this self parent 内存方式及使用方法讲解
<?php /** * */ /*class Web{ private $webname; private $weburl; function __construct($webname,$web ...
- vue创建组件
vue创建组件是很容易的: js: Vue.component("component-item",{ //component-item就是我们在HTML页面上引用的组件,它会在 ...
- C++高级编程2. 静态动态链接库
C++高级编程2. 静态动态链接库20131018 1.动态链接库和静态链接库的区别: 静态链接库就是把lib文件中用到的函数代码直接连接进目标程序,程序运行的时候不在需要其他的库文件:动态链接库是把 ...
- html/css/javascript练习代码
这两天心血来潮学习了前端,自己也做了个小小的网页,不好看QAQ 不过网页上集结了很多零碎的知识,在这里先马克一下.图片地址:https://github.com/lesroad/html-css-js ...
- 1D mesauring
The Basics of Measure Objects 2.1 the process of 1D Edge extraction Then, the mean ...
- *SCM-MANAGER独立部署方式
从官网获取最新版本 scm-manager 独立安装包 https://www.scm-manager.org/download/ 解压 为合适的路径 修改 services.bat 文件服务相关信息 ...
- iOS开发:MKMapView地图内存持续增加的释放解决办法
内存持续增加的释放解决办法 最近修改一个用到MKMapView的项目,内存一直占用过多,每次拖拽地图时还会增加占用,且一直无法释放. 经过两天的排查,最后锁定是创建的self.map对象在加载地图的时 ...