thinkphp5-开启sql日志记录

本文详细介绍了如何在ThinkPHP5框架中开启SQL日志记录,包括修改Database.php和Config.php文件的具体步骤,以及当默认日志记录功能被关闭时,如何在入口文件中重新初始化日志记录。
  1. 第一步:在Database.php文件中将数据库debug设置为true,(默认是true)
// 数据库调试模式
'debug'           => true,
  1. 第二步:在Config.php文件中写如下代码
  'log' => [
        // 日志记录方式,内置 file socket 支持扩展
        'type'  => 'File',
        // 日志保存目录
        'path'  => LOG_PATH,
        // 日志记录级别
        'level' => ['sql'],
    ],

一班这样设置之后就可以开启SQL日志记录了。


但是如果在项目中关闭了tp5自带的日志记录功能(将type设置为了test就关闭了, 默认的日志记录功能)的话,就需要初始化日志记录。

因为在项目中已经修改了Config.php。

'log' => [
        // 日志记录方式,内置 file socket 支持扩展
        'type'  => 'test',
        // 日志保存目录
        'path'  => LOG_PATH,
        // 日志记录级别
        'level' => ['sql'],
    ],

所以需要在其他地方添加重新配置log,进行日志的初始化。

那什么地方可以进行初始化呢,那就是入口文件,加载时每次都去执行的文件是入口文件,所以可以把配置文件写在入口文件处,进行初始化。

\think\Log::init([
   'type'=>'File',
   'path'=>LOG_PATH,
   'level'=>['sql'],
]);

这样就可以看到日志文件中的sql语句了,在这里插入图片描述

ThinkPHP6 框架中,可以通过数据库的监听功能将执行的 SQL 语句输出到日志文件中。这种机制允许在每次执行 SQL 时触发一个回调函数,从而可以捕获 SQL 语句并写入日志文件。以下是具体的实现方式: ### 实现步骤 1. **创建中间件** 首先,创建一个中间件文件,例如 `app/middleware/SqlLogger.php`,并在其中定义监听逻辑。以下是一个示例实现: ```php <?php namespace app\middleware; use think\facade\Db; use think\facade\Session; class SqlLogger { public function handle($request, \Closure $next) { // 监听所有SQL Db::listen(function ($sql, $time) { // 记录日志 $log = [ 'user_id' => Session::get('userid', 'guest'), 'sql' => $sql, 'time' => date('Y-m-d H:i:s'), 'ip' => $request->ip(), ]; // 写入日志文件 file_put_contents("D:/phpstudy_pro/WWW/sql.log", json_encode($log) . "\n", FILE_APPEND); }); return $next($request); } } ``` 2. **注册中间件** 接下来,打开 `app/middleware.php` 文件,并将创建的中间件注册到全局中间件列表中: ```php <?php // 全局中间件定义文件 return [ // 全局请求缓存 // \think\middleware\CheckRequestCache::class, // 多语言加载 // \think\middleware\LoadLangPack::class, // Session初始化 \think\middleware\SessionInit::class, // 跨域中间件 \think\middleware\AllowCrossDomain::class, // 自定义SQL日志记录中间件 \app\middleware\SqlLogger::class, ]; ``` 3. **日志输出格式** 通过上述代码,每次执行 SQL 时,都会将包含用户 ID、SQL 语句、执行时间及 IP 地址的日志信息追加写入指定的日志文件中。例如,日志文件内容可能如下所示: ```json {"user_id":"123","sql":"UPDATE active SET share = share+1 WHERE id = 5","time":"2023-10-15 14:30:00","ip":"127.0.0.1"} ``` 4. **注意事项** - 日志文件路径可以根据实际需求进行调整。 - 如果需要区分查询和写操作,可以在监听回调中添加 SQL 类型判断逻辑,例如通过正则表达式匹配 `INSERT`、`UPDATE`、`DELETE` 等操作。 - 为避免日志文件过大,建议定期清理或进行日志轮转管理。 通过上述方法,可以轻松实现将 SQL 语句记录到日志文件中,从而便于调试和性能优化[^2]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值