laravel日志器类应该放在哪里?

9 浏览
0 Comments

laravel日志器类应该放在哪里?

我有两个日志记录器类。

1. RequestLogger(将所有传入的API请求记录到数据库中)

2. SqlLogger(将所有SQL查询记录到日志文件中)

目前,我将它们定义为帮助器文件中的类:

1. app/Helpers/RequestLogger.php

2. app/Helpers/SqlLogger.php

然而,我不确定这是否是正确的做法。它们是不是应该是服务提供者而不是帮助器?目前,对于在这个上下文中什么是帮助器,什么是服务提供者,我很难定义。

0
0 Comments

在Laravel中,我们通常需要将日志记录器放在适当的位置。根据操作的不同,可以将日志记录器存储在不同的地方,并使用不同的命名约定。例如,在这种情况下,请求日志记录器可以作为中间件的一个很好的选择。由于每个API请求都需要进行日志记录,所以可以创建一个中间件,如下所示:

namespace App\Http\Middleware;
use Closure;
use App\Models\Log;
class ApiRequestLogger
{
    public function handle($request, Closure $next)
    {
        $response = $next($request);
        // 在这里创建日志条目...
        return $response;
    }
}

要使用这个中间件,需要在`app\Http\Kernel.php`类中注册它。可以将其添加到`api`组中,或者可以使用以下方式将其添加到`$routeMiddleware`中:

'log' => \App\Http\Middleware\ApiRequestLogger::class,

现在,可以通过在路由声明中单独或按组添加中间件来在每个API路由中使用它,具体取决于如何注册它。

查询日志记录器与其他日志记录器有些不同(从逻辑上讲),因为我们想要记录每个SQL查询,所以可以简单地在`AppServiceProvider`或自己的服务提供者的`boot`方法中注册以下事件:

\DB::listen(function ($query) {
    // 在这里编写你的代码...
    // $query->sql
    // $query->bindings
    // $query->time
    // \Log::debug($query->sql . ' - ' . serialize($query->bindings));
});

现在,这对我来说似乎还不错,但是您可以使用单独的类/辅助文件来存储与日志记录相关的代码,所以这取决于您。如果查询日志足够简单,那么为什么要再增加一个单独的类/文件呢?但是您也可以使用单独的类,并将该类存储在一个完全新的目录中,例如:`services\QueryLogger.php`,或者任何您认为合适的名称,但是没有最佳或预定义的方式,Laravel不会强制您组织代码的方式。保持简单即可。

0