Log/Save all SQL Queries executed from laravel

5 浏览
0 Comments

Log/Save all SQL Queries executed from laravel

我们面临一个非常关键且奇怪的问题,在一个漫长的过程中丢失了一些数据。我们正在处理货物数据,一个装运可能包含来自1000个客户的1000个箱子。每个客户都会获得自己的跟踪号(awb号),我们将把1000个装运合并成一个装运号,并使用装运号更新每个过程。当我们更新一个装运号时,所有相关的装运都会被更新。在这个过程中,我们没有更新托运人/收货人的详细信息,但是在此过程之后,随机的托运人和收货人数据被删除了。我们已经分析了整个代码一周,但是我们不知道具体是在什么地方删除的。这是一个生产问题,我们正处于一个非常关键的阶段。我们无法在我们的环境中重现这个问题。但是这个问题随机地从客户端的不同分支报告出来。

为了找出问题,我们决定增加更多的日志,并且希望对执行的SQL语句进行严格的监控。我是否有办法在Laravel中记录/保存执行的查询(包括DB和Eloquent模型)。

我期望的是,如果我在Laravel框架类中添加一段代码,它必须将SQL查询记录在文件/数据库中,以便我们不会错过任何查询。

我们已经开始分析日志,但还是没有头绪,有人能提供如何找出这个问题的建议吗?

我们使用的是Laravel 5.5。

0
0 Comments

问题:如何在Laravel中记录或保存执行的所有SQL查询?

原因:在开发过程中,我们可能需要跟踪和记录执行的所有SQL查询,以便进行调试和性能优化。

解决方法:可以使用Laravel的事件监听器来实现记录或保存执行的所有SQL查询。

步骤如下:

1. 打开文件app\Providers\AppServiceProvider.php

2. 在boot方法中添加以下代码:

use Illuminate\Support\Facades\DB;
public function boot()
{
    DB::listen(function ($query) {
        dd($query->sql);
        // $query->bindings
        // $query->time
    });
}

3. 保存并关闭文件。

现在,每当在应用程序中执行SQL查询时,将会触发DB::listen事件,并将查询的相关信息传递给回调函数。在回调函数中,我们可以通过dd($query->sql)来打印查询语句。

此外,我们还可以通过$query->bindings获取查询绑定的参数,以及通过$query->time获取查询的执行时间。

参考链接:https://laravel.com/docs/5.5/database#listening-for-query-events

0