P6SPY配置打印SQL,美化SQL
【摘要】 P6SPY配置打印SQL,美化SQL
P6SPY
P6Spy是一个可以用来在应用程序中拦截和修改数据操作语句的开源框架。 通过P6Spy我们可以对SQL语句进行拦截,相当于一个SQL语句的记录器,这样我们可以用它来作相关的分析,比如性能分析。
1、原理
p6spy将应用的数据源给劫持了,应用操作数据库其实在调用p6spy的数据源,p6spy劫持到需要执行的sql或者hql之类的语句之后,他自己去调用一个realDatasource,再去操作数据库,
包括P6Log和P6Outage两个模块:P6Log 用来拦截和记录任务应用程序的 JDBC 语句,P6Outage 专门用来检测和记录超过配置条件里时间的 SQL 语句.
2、应用场景
记录SQL语句的执行时间戳。
记录SQL语句类型
记录SQL填入参数的和没有填入参数的SQL语句
根据配置的时间控制SQL语句的执行时间,对超出时间的SQL语句输出到日志文件中
p6spy 可以输出日志到文件中、控制台、或者传递给 Log4j,而且还能配搭 SQL Profiler 或 IronTrackSQL 图形化监控 SQL 语句,监测到哪些语句的执行是耗时的,逐个优化。
引入依赖
<dependency>
<groupId>p6spy</groupId>
<artifactId>p6spy</artifactId>
<version>3.8.0</version>
</dependency>
配置数据源的URL :重点是URL,驱动类
spring:
profiles: dev
application:
name: integral_mobile
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.p6spy.engine.spy.P6SpyDriver
url: jdbc:p6spy:mysql://d-mysql.dmsd.tech/integral_dev?autoReconnect=true&useSSL=false&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&allowMultiQueries=true
username: jifen #jifen
password: jifen
添加美化SQL的类
package com.tfjybj.integral.config;
import com.p6spy.engine.spy.appender.MessageFormattingStrategy;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* p6spy打印日志输出格式修改
* 1.只打印最终执行的sql.
* 2.sql换到下一行
* 3.结尾处增加分号,以标示sql结尾
*
* @author likun
* @since 2017年10月31日
*/
public class P6SpyLogger implements MessageFormattingStrategy {
private final SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS");
@Override
public String formatMessage(int connectionId, String now, long elapsed, String category, String prepared, String sql, String url) {
StringBuffer buffer = new StringBuffer();
if (!("").equals(sql.trim())) {
return buffer.append("/* ").append(format.format(new Date())).append(" | took ")
.append(elapsed).append("ms | ").append(category)
.append(" | connection ").append(connectionId).append(" */ \n ")
.append(sql).append(";").toString();
}
return "";
}
}
或者使用spy.properties配置文件
module.log=com.p6spy.engine.logging.P6LogFactory,com.p6spy.engine.outage.P6OutageFactory
# 自定义日志打印
logMessageFormat=com.fkzd.framework.config.P6spySqlFormatConfig //自定义P6SpyLogger类的地址
# 使用日志系统记录sql
appender=com.p6spy.engine.spy.appender.StdoutLogger
## 配置记录Log例外
excludecategories=info,debug,result,batc,resultset
# 设置使用p6spy driver来做代理
deregisterdrivers=true
# 日期格式
dateformat=yyyy-MM-dd HH:mm:ss
# 实际驱动
driverlist=com.mysql.cj.jdbc.Driver
# 是否开启慢SQL记录
outagedetection=true
# 慢SQL记录标准 秒
outagedetectioninterval=2
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)