下面這段代碼是基于laravel框架的,主要監(jiān)聽SQL查詢,并記錄下整條sql日志;
在webman中應(yīng)該放到哪里呢? 請(qǐng)大佬幫忙看下哈。
DB::listen(function ($query) {
$sql = $query->sql;
$bindings = [];
if ($query->bindings) {
foreach ($query->bindings as $v) {
if (is_numeric($v)) {
$bindings[] = $v;
} else {
$bindings[] = '"' . strval($v) . '"';
}
}
}
$execute = Str::replaceArray('?', $bindings, $sql);
logs('sql')->info('SQL ' . $execute);
});
新建 app/bootstrap/LaravelLog.php
(目錄不存在請(qǐng)自行創(chuàng)建)
<?php
namespace app\bootstrap;
use Webman\Bootstrap;
use support\Db;
class LaravelLog implements Bootstrap
{
public static function start($worker)
{
Db::listen(function ($query) {
$sql = $query->sql;
$bindings = [];
if ($query->bindings) {
foreach ($query->bindings as $v) {
if (is_numeric($v)) {
$bindings[] = $v;
} else {
$bindings[] = '"' . strval($v) . '"';
}
}
}
$execute = Str::replaceArray('?', $bindings, $sql);
logs('sql')->info('SQL ' . $execute);
});
}
}
在 config/bootstrap.php 里加一行配置,
return [
// ... 省略了其他配置...
app\bootstrap\LaravelLog::class
];
這樣進(jìn)程啟動(dòng)的時(shí)候就會(huì)自動(dòng)執(zhí)行app\bootstrap\LaravelLog
的start方法
app/bootstrap/LaravelLog.php
文件內(nèi)容,應(yīng)該如下,否則會(huì)報(bào)錯(cuò)
<?php
namespace app\bootstrap;
use Webman\Bootstrap;
use support\Db;
use Illuminate\Support\Str; //新增
use support\Log;//新增
class LaravelSqlLog implements Bootstrap
{
public static function start($worker)
{
Db::listen(function ($query) {
$sql = $query->sql;
$bindings = [];
if ($query->bindings) {
foreach ($query->bindings as $v) {
if (is_numeric($v)) {
$bindings[] = $v;
} else {
$bindings[] = '"' . strval($v) . '"';
}
}
}
$execute = Str::replaceArray('?', $bindings, $sql);
//logs('sql')->info('SQL ' . $execute);
Log::info('SQL ' . $execute);//新增
});
}
}