基類增加腳本日志函數,記錄所有調用的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');
});
}
~~~

* * * * *
[日志手冊](http://www.hmoore.net/manual/thinkphp5/118123)