dmeys/request-logger

Laravel/Lumen 包,用于记录请求和响应

v1 2024-08-28 09:03 UTC

This package is auto-updated.

Last update: 2024-09-02 07:14:08 UTC


README

Laravel request logger

记录请求和响应

此包添加了一个中间件,可以记录传入的请求和响应。您可以在 https://your.domain/request-logs 的视图面板中查看日志

Laravel 安装

您可以通过 composer 安装此包

composer require dmeys/request-logger

您必须使用以下命令发布资产文件

php artisan vendor:publish --provider="Dmeys\RequestLogger\RequestLoggerServiceProvider" 

您必须使用以下命令发布配置文件和资产文件

request-logger.php
return [
    'locale' => env('REQUEST_LOGGER_LOCALE', 'en'), // available 'en', 'ua'
    'middleware' => [
        \Dmeys\RequestLogger\Http\Middleware\BaseAuth::class,
    ],
    'base_auth' => [
        'login' => env('REQUEST_LOGGER_LOGIN', 'login'),
        'password' => env('REQUEST_LOGGER_PASSWORD', 'password'),
    ],
    'timezone' => env('REQUEST_LOGGER_TIMEZONE', env('APP_TIMEZONE', config('app.timezone', 'UTC'))),
    'date_format' => env('REQUEST_LOGGER_DATE_FORMAT', 'Y-m-d'),
    'time_format' => env('REQUEST_LOGGER_TIME_FORMAT', 'H:i:s.u'),
    'log_keep_days' => env('REQUEST_LOGGER_KEEP_DAYS', 14),
    'table_name' => 'request_logs',
    'enabled' => env('REQUEST_LOGGER_ENABLED', true),
    'ignore_paths' => [
        'request-logs*',
        'telescope*',
        'nova-api*',
    ],
    'hide_fields' => [
        'request' => [
            'headers' => [
                'authorization',
                'php-auth-user',
                'php-auth-pw',
            ],
            'content' => [
                'password',
                'token',
                'access_token',
            ],
        ],
        'response' => [
            'content' => [
                'password',
                'token',
                'access_token',
            ],
        ],
    ],
    'replacer_hidden_fields' => '|^_-|',
];

您必须使用以下命令执行迁移

    php artisan migrate --path=/vendor/dmeys/request-logger/database/migrations/2021_11_05_000000_create_request_log_fingerprints_table.php
    php artisan migrate --path=/vendor/dmeys/request-logger/database/migrations/2021_11_05_000000_create_request_logs_table.php

此包提供了一个中间件,可以作为全局中间件或单个路由添加。

// in `app/Http/Kernel.php`

protected $middleware = [
    // ...
    
    \Dmeys\RequestLogger\Http\Middleware\RequestLogger::class
];
// in a routes file

Route::post('/test', function () {
    //
})->middleware(\Dmeys\RequestLogger\Http\Middleware\RequestLogger::class);

支持的驱动器

  • 存储日志
  • 数据库(mysql)

Lumen 安装

您可以通过 composer 安装此包

composer require dmeys/request-logger --dev

您必须安装 vendor:publish 插件

您必须注册提供者

//in 'bootstrap/app.php'

$app->register(\Dmeys\RequestLogger\RequestLoggerServiceProvider::class); 

您必须使用以下命令发布配置文件和资产文件

php artisan vendor:publish --provider="Dmeys\RequestLogger\RequestLoggerServiceProvider" 

这是已发布配置文件的内容

request-logger.php
return [
    'locale' => env('REQUEST_LOGGER_LOCALE', 'en'), // available 'en', 'ua'
    'middleware' => [
        \Dmeys\RequestLogger\Http\Middleware\BaseAuth::class,
    ],
    'base_auth' => [
        'login' => env('REQUEST_LOGGER_LOGIN', 'login'),
        'password' => env('REQUEST_LOGGER_PASSWORD', 'password'),
    ],
    'timezone' => env('REQUEST_LOGGER_TIMEZONE', env('APP_TIMEZONE', config('app.timezone', 'UTC'))),
    'date_format' => env('REQUEST_LOGGER_DATE_FORMAT', 'Y-m-d'),
    'time_format' => env('REQUEST_LOGGER_TIME_FORMAT', 'H:i:s.u'),
    'log_keep_days' => env('REQUEST_LOGGER_KEEP_DAYS', 14),
    'table_name' => 'request_logs',
    'enabled' => env('REQUEST_LOGGER_ENABLED', true),
    'ignore_paths' => [
        'request-logs*',
        'telescope*',
        'nova-api*',
    ],
    'hide_fields' => [
        'request' => [
            'headers' => [
                'authorization',
                'php-auth-user',
                'php-auth-pw',
            ],
            'content' => [
                'password',
                'token',
                'access_token',
            ],
        ],
        'response' => [
            'content' => [
                'password',
                'token',
                'access_token',
            ],
        ],
    ],
    'replacer_hidden_fields' => '|^_-|',
];

您必须注册此配置文件

//in 'bootstrap/app.php'

$app->configure('request-logger');

您必须使用以下命令执行迁移

php artisan migrate

您必须使用以下命令创建存储符号链接

php artisan storage:link

您必须注册中间件

// in 'bootstrap/app.php'

$app->routeMiddleware([
    // ...
    
    'request-logger' => \Dmeys\RequestLogger\Http\Middleware\RequestLogger::class,
]);

此包提供了一个中间件,可以作为全局中间件或单个路由添加。

// in a routes file

Route::post('/test', ['uses' => 'TestController@test', 'middleware' => ['request-logger']]);

数据清理

如果不清理,则 request_logs 表可能会非常快速地积累记录。为了缓解这种情况,您应该安排每天运行 request-logs:clear artisan 命令。

$schedule->command('request-logs:clear')->daily();

运行 php artisan request-logs:clear 命令将删除配置文件 log_keep_days 中指定的天数之前的记录。

要删除所有日志,请添加 "--all" 参数 php artisan request-logs:clear --all

配置自定义字段

请求记录器允许您添加用于记录的自定义字段。此包提供了 configureRequestLoggerCustomFields 函数,该函数必须返回一个包含自定义字段的数组。此外,请确保将这些自定义字段添加到数据库表 request_logs 中。

以下是使用 configureRequestLoggerCustomFields() 的示例

  • 添加中间件 ConfigureRequestLoggerMiddleware
  • 在中件中,实现 handle 方法,并使用 configureRequestLoggerCustomFields 函数指定自定义字段。
final class ConfigureRequestLoggerMiddleware
{
	public function handle(Request $request, Closure $next)
	{
		configureRequestLoggerCustomFields(function () use ($request) {
			return ['user_id' => $request->user()->id ?? null];
		});

		return $next($request);
	}
}
  • 在 Http Kernel 中注册中间件。

这些步骤概述了如何使用 configureRequestLoggerCustomFields 函数将自定义字段添加到您的日志配置中。

测试

php vendor/bin/phpunit