Laravel 记录SQL日志
2023-06-13 09:16:26 时间
Laravel 默认只在sql语法错误时提示完整的sql日志,但实际情况接口慢,筛选条件和预期不符等,都需要看到sql语句,通过sql语句判断问题所在
下面介绍实现方式
第一步
修改 AppServiceProvider.php
vi app/Providers/AppServiceProvider.php
<?php
namespace App\Providers;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
/**
* Register any application services.
*
* @return void
*/
public function register()
{
$this->registerSqlDebug();
}
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
}
protected function registerSqlDebug()
{
if (config('logging.enable_log_sql', false)) {
$print = false;
if ($this->app->environment('local') && env('IS_UNIT')) {
$print = true;
}
DB::listen(function ($query) use ($print) {
$sql = $query->sql;
foreach ($query->bindings as $binding) {
$value = is_numeric($binding) ? $binding : "'{$binding}'";
$sql = preg_replace('/\?/', (string) $value, $sql, 1);
}
$sql = sprintf('【%s】 %s', $this->format_duration($query->time / 1000), $sql);
Log::channel('sql')->debug($sql);
if ($print) {
dump($sql);
}
});
}
}
private function format_duration($seconds): string
{
if ($seconds < 0.001) {
return round($seconds * 1000000) . 'μs';
} elseif ($seconds < 1) {
return round($seconds * 1000, 2) . 'ms';
}
return round($seconds, 2) . 's';
}
}
第二步
修改 config/logging.php
增加sql日志开关
/**
* 开启sql日志
*/
'enable_log_sql' => env('LOG_SQL_ENABLED', true),
日志默认输出到 storage/logs/laravel.log
文件,为了区分开,增加以下配置
'sql' => [
'driver' => 'daily',
'path' => storage_path('logs/debug/sql.log'),
'level' => env('LOG_LEVEL', 'debug'),
'days' => 14,
],
相关文章
- journalctl 日志问题
- httprunner(10)日志信息「建议收藏」
- SQL开发知识:Sql注入原理简介
- Linux定时删除n天前日志详解程序员
- Oracle 监控SQL优化:有效实现数据库性能提升(oracle监控sql)
- MySQL查询:精准搜索SQL语句(mysql查询sql)
- MySQL中常用的SQL语句(sql语句mysql)
- MySQL日志恢复:新的工具帮助您恢复数据(mysql日志恢复工具)
- MySQL日志记录:查找它们的位置(mysql的日志在哪里)
- 型深入解析Linux系统记录的日志类型(linux日志类)
- Mysql中删除记录的SQL语句(mysql删除sql语句)
- MySQL备份表:记录每一步SQL语句(mysql备份表sql)
- 如何在MySQL中开启日志记录呢?(mysql日志开启)
- 如何使用MySQL合并SQL数据?(mysql合并sql)
- SQL注入攻击对MSSQL的威胁及防护策略(sql注入 mssql)
- MySQL SQL的递归技术应用(mysql sql 递归)
- MySQL中方便的SQL编辑器,提高开发效率(mysql中sql编辑器)
- Oracle 减法运算一次性解决复杂SQL问题(oracle 减法sql)
- Oracle SQL配置完美方案让你随心所欲(oracle sql配置)
- Oracle SQL分行技能实现高效管理(oracle sql分行)
- 用ASP实现写IIS日志的代码