spatie/laravel-http-logger

Laravel 包用于记录 HTTP 请求

1.11.0 2024-03-02 05:42 UTC

This package is auto-updated.

Last update: 2024-09-15 09:54:23 UTC


README

Latest Version on Packagist run-tests Total Downloads

此包添加了一个中间件,可以将传入的请求记录到默认日志中。如果用户的请求过程中出现任何问题,您仍然可以访问用户发送的原始请求数据。

此日志可以作为关键用户提交(如生成潜在客户的表单)的额外安全网。

支持我们

我们投入了大量资源来创建 最佳开源包。您可以通过 购买我们的付费产品之一 来支持我们。

我们非常感激您从家乡寄给我们一张明信片,说明您正在使用我们的哪个包。您可以在 我们的联系页面 上找到我们的地址。我们将所有收到的明信片发布在我们的 虚拟明信片墙 上。

安装

您可以通过 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 类将请求写入日志。

此包内添加了一个默认日志实现。它将仅记录 POSTPUTPATCHDELETE 请求,并将其写入默认 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)。有关更多信息,请参阅 许可文件