thinkphp6实现统一监听并记录所有执行的sql语句除查询外

  1. 创建文件app/middleware/SqlLogger.php
<?php
namespace app\middleware;

use think\facade\Db;
use think\facade\Session;

class SqlLogger
{
    public function handle($request, \Closure $next)
    {
        // 监听所有SQL $request->ip()
        Db::listen(function($sql, $time) {
            if (preg_match('/^(INSERT|UPDATE|DELETE|REPLACE)/i', $sql)) {
                $log = [
                    'user_id' => Session::get('userid', 'guest'),
                    'sql'     => $sql,
                    'time'    => date('Y-m-d H:i:s'),
                    'ip'      => '127.1.1.1'
                ];
                file_put_contents("D:/phpstudy_pro/WWW/sql.log", json_encode($log)."\n", FILE_APPEND);
            }
        });

        return $next($request);
    }
}

?>
  1. 打开app/middleware.php文件并注册该中间件
<?php
// 全局中间件定义文件
return [
    // 全局请求缓存
    // \think\middleware\CheckRequestCache::class,
    // 多语言加载
    // \think\middleware\LoadLangPack::class,
    // Session初始化
    \think\middleware\SessionInit::class,
    //跨中间件
    \think\middleware\AllowCrossDomain::class,
    \app\middleware\SqlLogger::class
];
  1. 最终效果:执行修改sql后,会自动触发该方法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值