spatie / laravel-http-logger
Laravel 包用于记录 HTTP 请求
Requires
- php: ^7.4|^8.0
- illuminate/support: ^8.0|^9.0|^10.0|^11.0
Requires (Dev)
- orchestra/testbench: ^6.0|^7.0|^8.0|^9.0
- pestphp/pest: ^1.22|^2.34
- phpunit/phpunit: ^9.0|^10.5
README
此包添加了一个中间件,可以将传入的请求记录到默认日志中。如果用户的请求过程中出现任何问题,您仍然可以访问用户发送的原始请求数据。
此日志可以作为关键用户提交(如生成潜在客户的表单)的额外安全网。
支持我们
我们投入了大量资源来创建 最佳开源包。您可以通过 购买我们的付费产品之一 来支持我们。
我们非常感激您从家乡寄给我们一张明信片,说明您正在使用我们的哪个包。您可以在 我们的联系页面 上找到我们的地址。我们将所有收到的明信片发布在我们的 虚拟明信片墙 上。
安装
您可以通过 composer 安装此包
composer require spatie/laravel-http-logger
可选地,您可以使用以下命令发布配置文件:
php artisan vendor:publish --provider="Spatie\HttpLogger\HttpLoggerServiceProvider" --tag="config"
这是发布配置文件的内容
return [ /* * Determine if the http-logger middleware should be enabled. */ 'enabled' => env('HTTP_LOGGER_ENABLED', true), /* * The log profile which determines whether a request should be logged. * It should implement `LogProfile`. */ 'log_profile' => \Spatie\HttpLogger\LogNonGetRequests::class, /* * The log writer used to write the request to a log. * It should implement `LogWriter`. */ 'log_writer' => \Spatie\HttpLogger\DefaultLogWriter::class, /* * The log channel used to write the request. */ 'log_channel' => env('LOG_CHANNEL', 'stack'), /* * The log level used to log the request. */ 'log_level' => 'info', /* * Filter out body fields which will never be logged. */ 'except' => [ 'password', 'password_confirmation', ], /* * List of headers that will be sanitized. For example Authorization, Cookie, Set-Cookie... */ 'sanitize_headers' => [], ];
用法
此包提供了一种中间件,可以作为全局中间件或单个路由添加。
Laravel >= 11
->withMiddleware(function (Middleware $middleware) { $middleware->append(\Spatie\HttpLogger\Middlewares\HttpLogger::class); })
Laravel <= 10
// in `app/Http/Kernel.php` protected $middleware = [ // ... \Spatie\HttpLogger\Middlewares\HttpLogger::class ];
// in a routes file Route::post('/submit-form', function () { // })->middleware(\Spatie\HttpLogger\Middlewares\HttpLogger::class);
日志记录
使用两个类来处理传入请求的日志记录:一个 LogProfile
类将确定是否应该记录请求,而 LogWriter
类将请求写入日志。
此包内添加了一个默认日志实现。它将仅记录 POST
、PUT
、PATCH
和 DELETE
请求,并将其写入默认 Laravel 日志记录器。默认情况下启用日志记录,但可以通过 .env
文件中的 HTTP_LOGGER_ENABLED
变量切换开或关。
您可以根据自己的需要实现自己的日志配置文件和/或日志写入器类,并在 config/http-logger.php
中进行配置。
自定义日志配置文件必须实现 \Spatie\HttpLogger\LogProfile
。此接口要求您实现 shouldLogRequest
。
// Example implementation from `\Spatie\HttpLogger\LogNonGetRequests` public function shouldLogRequest(Request $request): bool { return in_array(strtolower($request->method()), ['post', 'put', 'patch', 'delete']); }
自定义日志写入器必须实现 \Spatie\HttpLogger\LogWriter
。此接口要求您实现 logRequest
。
// Example implementation from `\Spatie\HttpLogger\DefaultLogWriter` public function logRequest(Request $request): void { $method = strtoupper($request->getMethod()); $uri = $request->getPathInfo(); $bodyAsJson = json_encode($request->except(config('http-logger.except'))); $message = "{$method} {$uri} - {$bodyAsJson}"; Log::channel(config('http-logger.log_channel'))->info($message); }
隐藏敏感头信息
您可以在将它们发送到日志记录之前定义要清理的头信息。最常见的一个例子就是认证头。如果您不想记录 jwt 令牌,可以将该头信息添加到 http-logger.php
配置文件中
// in config/http-logger.php return [ // ... 'sanitize_headers' => [ 'Authorization' ], ];
输出将是 Authorization: "****"
而不是 Authorization: "Bearer {token}"
测试
composer test
更新日志
请参阅 更新日志 了解最近更改的详细信息。
贡献
请参阅 贡献指南 了解详细信息。
安全性
如果您发现与安全相关的问题,请通过 security@spatie.be 发送电子邮件,而不是使用问题跟踪器。
鸣谢
许可协议
MIT 许可协议 (MIT)。有关更多信息,请参阅 许可文件。