laravel日志器类应该放在哪里?
在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不会强制您组织代码的方式。保持简单即可。