21、p6spy输出执行SQL日志

文章目录

  • 1、背景
  • 2、简介
  • 3、接入
    • 3.1、 引入依赖
    • 3.2、修改database参数:
    • 3.3、 创建P6SpyLogger类,自定义日志格式
    • 3.4、添加spy.properties
    • 3.5、 输出样例
  • 4、补充
    • 4.1、参数说明

1、背景

在开发的过程中,总希望方法执行完了可以看到完整是sql语句,从而判断执行的是否正确,所以就希望有一个可以打印sql语句的插件。

2、简介

p6spy 是数据库动态监控的一种框架,是一个可以用来监控JDBC执行语句的开源产品,它可以使得数据库数据无缝拦截和操作,而不必对现有应用程序的代码作任何修改。利用p6spy很容易的就能监控到JDBC中执行的SQL语句,便于系统调试和性能调优。p6spy分发包括P6Log,它是一个可记录任何Java应用程序的所有JDBC事务的应用程序。其配置完成使用时,可以进行数据访问性能的监测。

p6spy 实现原理是对JDBC的关键类进行了一次包装,让应用系统调用自己的类;自己的类截获到SQL语句后再调用真实的JDBC驱动进行执行SQL,这样,在自己的类里面就可以监控到所有的SQL语句。

GitHub地址:https://github.com/p6spy/p6spy
官网地址:https://p6spy.readthedocs.io/en/latest/index.html#
仓库地址:https://mvnrepository.com/artifact/p6spy/p6spy

3、接入

3.1、 引入依赖

gradle:

// https://mvnrepository.com/artifact/p6spy/p6spy
implementation 'p6spy:p6spy:3.9.1'

maven:



    p6spy
    p6spy
    3.9.1

3.2、修改database参数:

spring:
  datasource:
    driver-class-name: com.p6spy.engine.spy.P6SpyDriver
    url: jdbc:p6spy:mysql://XXXX:3306/datasource?characterEncoding=utf8

3.3、 创建P6SpyLogger类,自定义日志格式



package com.XXX.config;

import com.p6spy.engine.spy.appender.MessageFormattingStrategy;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
 * @author :
 * @date :Created in 14:45 2023/7/25
 * @description :
 * @version: 1.0
 */
public class P6SpyLogger implements MessageFormattingStrategy {

    private 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 s4) {
        return !"".equals(sql.trim())
                ? this.format.format(new Date()) + "[INFO] | took " + elapsed + "ms | " + category + "\n " + sql + ";"
                : "[INFO][]";
    }
}

3.4、添加spy.properties

module.log=com.p6spy.engine.logging.P6LogFactory,com.p6spy.engine.outage.P6OutageFactory
# 自定义日志打印
# 自定义P6SpyLogger类的地址
logMessageFormat=com.XXX.config.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.jdbc.Driver
# 是否开启慢SQL记录
outagedetection=true
# 慢SQL记录标准 秒
outagedetectioninterval=2

3.5、 输出样例

2023-07-25 10:22:24:090 | took 8ms | statement
 select * from t_user where id = 1;

4、补充

4.1、参数说明

21、p6spy输出执行SQL日志_第1张图片

你可能感兴趣的:(Java相关,存储相关,日常Bug分析与修复方案,p6spy,sql,数据库)