基类增加脚本日志函数,记录所有调用的SQL脚本:
~~~
/**
* 记录SQL脚本
* @return [void]
*/
public static function logSql($level = 'sql', $folder = 'sql')
{
//初始化调试监听文件日志路径
//
Log::init([
'type' => 'File',
'path' => APP_PATH . 'logs' . DS . $folder . DS,
//ERROR 和SQL日志单独记录
'apart_level' => ['error', 'sql'],
]);
//对数据库执行的任何SQL操作进行监听
//
Db::listen(function ($sql, $time, $explain) {
// 记录SQL
Log::record($sql . ' [' . $time . 's]', 'sql');
// 查看性能分析结果
Log::record($explain, 'sql');
});
}
~~~
基类的数据模型初始化函数里面调用`self::logSql()`方法
~~~
protected function initialize()
{
parent::initialize();
//对数据库执行的任何SQL操作进行监听
self::logSql();
}
~~~
最终基类在application/logs/sql的日期目录下,将会不分模块的增加三种类型的日志,方便错误调试,SQL调试性能分析。
1. 主日志文件
2. error错误日志
3. sql脚本日志
~~~
<?php
namespace app\common\model;
use think\Db;
use think\Log;
use think\Model;
class SuperModel extends Model
{
//字段排序
protected $_order = [];
//继承父类initialize()
protected function initialize()
{
parent::initialize();
//对数据库执行的任何SQL操作进行监听
self::logSql();
}
/**
* 记录SQL脚本
*
* @return [void]
*/
public static function logSql($level = 'sql', $folder = 'sql')
{
//初始化调试监听文件日志路径
//
Log::init([
'type' => 'File',
'path' => APP_PATH . 'logs' . DS . $folder . DS,
//ERROR 和SQL日志单独记录
'apart_level' => ['error', 'sql'],
]);
//对数据库执行的任何SQL操作进行监听
//
Db::listen(function ($sql, $time, $explain) {
// 记录SQL
Log::record($sql . ' [' . $time . 's]', 'sql');
// 查看性能分析结果
Log::record($explain, 'sql');
});
}
~~~
![](https://box.kancloud.cn/c76e2a2d7eeed443f1ecf7844810fb0f_1091x611.png)
* * * * *
[日志手册](https://www.kancloud.cn/manual/thinkphp5/118123)