Tracer Druid 记录sql 以及参数
2019独角兽企业重金招聘Python工程师标准>>>
import java.sql.Types;import com.alibaba.druid.filter.FilterEventAdapter;
import com.alibaba.druid.proxy.jdbc.JdbcParameter;
import com.alibaba.druid.proxy.jdbc.PreparedStatementProxy;
import com.alibaba.druid.proxy.jdbc.StatementProxy;
import com.alibaba.druid.util.JdbcUtils;
import com.dominos.cloud.common.util.SpringBeanUtils;public class TracerDruidFilter extends FilterEventAdapter {@Overrideprotected void statementExecuteBefore(StatementProxy statement, String sql) {outLog(sql);logParameter(statement);super.statementExecuteBefore(statement, sql);}@Overrideprotected void statementExecuteUpdateBefore(StatementProxy statement, String sql) {// TODO Auto-generated method stuboutLog(sql);logParameter(statement);super.statementExecuteUpdateBefore(statement, sql);}@Overrideprotected void statementExecuteQueryBefore(StatementProxy statement, String sql) {// TODO Auto-generated method stuboutLog(sql);logParameter(statement);super.statementExecuteQueryBefore(statement, sql);}protected void statementExecuteBatchAfter(StatementProxy statement, int[] result) {String sql;if (statement instanceof PreparedStatementProxy) {sql = ((PreparedStatementProxy) statement).getSql();} else {sql = statement.getBatchSql();}outLog(sql);super.statementExecuteQueryBefore(statement, sql);} private void logParameter(StatementProxy statement) {if (!(statement instanceof PreparedStatementProxy)) {return;}TracerUtils tracer = SpringBeanUtils.getBean(TracerUtils.class);if (tracer == null) {return;}{StringBuffer buf = new StringBuffer();buf.append(" Parameters : [");for (int i = 0, parametersSize = statement.getParametersSize(); i < parametersSize; ++i) {JdbcParameter parameter = statement.getParameter(i);if (i != 0) {buf.append(", ");}if (parameter == null) {continue;}int sqlType = parameter.getSqlType();Object value = parameter.getValue();switch (sqlType) {case Types.NULL:buf.append("NULL");break;default:buf.append(String.valueOf(value));break;}}buf.append("]");tracer.addTag("sql.Parameters", buf.toString());}{StringBuffer buf = new StringBuffer();buf.append(" Types : [");for (int i = 0, parametersSize = statement.getParametersSize(); i < parametersSize; ++i) {JdbcParameter parameter = statement.getParameter(i);if (i != 0) {buf.append(", ");}if (parameter == null) {continue;}int sqlType = parameter.getSqlType();buf.append(JdbcUtils.getTypeName(sqlType));}buf.append("]");tracer.addTag("sql.Types", buf.toString());}}private void outLog(String sql) {TracerUtils tracer = SpringBeanUtils.getBean(TracerUtils.class);if (tracer != null) {tracer.addTag("sql.sql", sql);}}
}
转载于:https://my.oschina.net/xiaominmin/blog/3049471
Tracer Druid 记录sql 以及参数相关推荐
- druid监控记录mysql_使用Druid监控SQL执行状态
本文使用Druid的连接池替换掉原来的C3P0连接池,然后配置Druid的相关属性,完成对spring web工程的JDBC监控. 其实,我采用Druid替换其它连接池,最关键的一个理由是Druid有 ...
- 使用Druid监控SQL执行状态
本文使用Druid的连接池替换掉原来的C3P0连接池,然后配置Druid的相关属性,完成对Spring web工程的JDBC监控. 其实,我采用Druid替换其它连接池,最关键的一个理由是Druid有 ...
- SpringBoot使用Druid监控SQL
文章目录 1 监控mybatis下SQL 1.1 Druid简介 1.2 添加pom.xml依赖 1.3 配置相关属性 1.3.1 如何配置 Filter 1.4 监控页面 1.5 sql监控 1.6 ...
- 使用Druid监控SQL
今天把C3P0连接池更换了Druid数据,没有想到Druid监控SQL如此强大,以下是我配置Druid数据源步骤 Druid介绍 Druid是一个JDBC组件库,包括数据库连接池.SQL Parser ...
- druid监控数据转存mysql_使用Druid监控SQL执行状态
本文使用Druid的连接池替换掉原来的C3P0连接池,然后配置Druid的相关属性,完成对Spring web工程的JDBC监控. 其实,我采用Druid替换其它连接池,最关键的一个理由是Druid有 ...
- 如何记录SQL Server数据库对象
介绍 (Introduction) In any good programming reference, you will read that a developer has to document ...
- SpringBoot 整合Druid数据源SQL监控不显示问题
SpringBoot 整合Druid数据源SQL监控不显示问题 项目场景: 问题描述: 解决方案: 项目场景: SpringBoot 整合Druid数据源SQL监控不显示 问题描述: 明明使用Drui ...
- 查询前几条记录SQL在不同数据库中的用法
13,(1)查询前几条记录SQL在不同数据库中的用法; 1. ORACLE SELECT * FROM TABLE1 WHERE ROWNUM<=N 2. INFORMIX SELECT FIR ...
- Mybatis 实现SQL拦截并在控制台打印SQL和参数
2019独角兽企业重金招聘Python工程师标准>>> 注:可以拦截sql 执行时间,优化sql.并打印sql 以及参数 第一步:创建类: SqlPrintInterceptor 并 ...
最新文章
- 融合与Web应用 2011年安全领域趋势展望
- pragma名字的来源
- Java的异常跟踪栈
- python中session的使用方法_python中requests库session对象的妙用详解
- opencv源码学习: getStructuringElement函数;
- 查询某表所有列名的SQL语句
- 什么是微服务_漫画:到底什么是微服务?
- Mp3原理及文件格式解析
- Transformer模型简介
- PDF虚拟打印机有什么用?关于PDF虚拟打印机你要知道的事情都在这
- 经典美文诵读2 If I Were a Boy Again假如我又回到了童年
- 使用QVE视频转换器制作gif动图
- 如何搭建适合自己团队的构建部署平台
- { content-visibility: auto; contain-intrinsic-size: 1px 5000px;}
- Java游戏开发——开心农场
- 如何不通过系统升级来安装window10正式版?(特别针对Xp用户)
- 双网卡同时连接内网和外网的解决方案
- TKCTF-学校内部的校赛
- Android 仿卡片消消除
- 相对论【2】杆和钟的运动
热门文章
- ftp服务器压缩文件,ftp压缩服务器文件
- 计算机专业指南考试,电大计算机专业专科期末考试试卷《计算机专业指南》试卷...
- fun python_Python(一)
- wireshark合并多个文件_小技巧:快速合并多个excel文件(收藏版)
- linux python自动补全_Linux下在python命令行中自动补全代码(py2、3,centos、ubuntu)...
- python函数分为_python 函数
- linux系统之centos/ubuntu选择
- 概率机器人总结——占用栅格地图先实践再推导
- 逻辑回归是个什么逻辑
- 【知识星球】卷积核和感受野可动态分配的分组卷积