benycode/slim-request-logger-middleware

一个用于请求日志的轻量级中间件

v0.0.1 2022-07-06 13:37 UTC

This package is not auto-updated.

Last update: 2024-09-26 22:54:57 UTC


README

一个为 Slim 4 框架设计的 请求 日志库。

功能

  • 日志请求:内容、头部、代理、方法、内容类型、内容长度、查询、IP;
  • 日志响应:状态、内容、内容类型、内容长度、耗时。

目录

安装

通过 Composer

$ composer require benycode/slim-request-logger-middleware

需要 Slim 4。

使用

使用 依赖注入(DI) 注入库中间件类

use BenyCode\Slim\RequestLoggerMiddleware\RequestLogMiddleware;
use BenyCode\Slim\RequestLoggerMiddleware\ResponseLogMiddleware;
use BenyCode\Slim\RequestLoggerMiddleware\RequestLog\FileSystemLog;

return [
    ......
    LoggerFactory::class => function (ContainerInterface $container) {
        return new ... ; // use PSR-3 logger
    },
    RequestLogMiddleware::class => function (ContainerInterface $container) {

        $logger = $container->get(LoggerFactory::class)
            ->addFileHandler('requests.log')
            ->createLogger();

        $requestLog = new FileSystemLog($logger);

        return new RequestLogMiddleware($requestLog);
    },
    ResponseLogMiddleware::class => function (ContainerInterface $container) {

        $logger = $container->get(LoggerFactory::class)
            ->addFileHandler('requests.log')
            ->createLogger();

        $requestLog = new FileSystemLog($logger);

        return new ResponseLogMiddleware($requestLog);
    },
];

添加 中间件 到全局路由

use BenyCode\Slim\RequestLoggerMiddleware\RequestLogMiddleware;
use BenyCode\Slim\RequestLoggerMiddleware\ResponseLogMiddleware;

$app
  ->add(ResponseLogMiddleware::class)
  ->add(RequestLogMiddleware::class)
  ->add(RKA\Middleware\IpAddress::class)
  ;

创建自己的日志输出类

use BenyCode\Slim\RequestLoggerMiddleware\RequestLog;

final class AnyLogClass implements RequestLog
{
    public function __construct(
        ...
    ) {
    }

    public function logRequest(string $requestId, ServerRequestInterface $request): void
    {
        $requestData = RequestTransformer::transformRequestData($request); // you can use the own request data transformer
        
        ... // do something with the request log data
    }

    public function logResponse(ServerRequestInterface $request, ResponseInterface $response): void
    {
        $responseData = ResponseTransformer::transformResponsetData($request, $response); // you can use the own response data transformer

        ... // do something with the response log data
    }
}

将新日志类注入到日志记录器中

use BenyCode\Slim\RequestLoggerMiddleware\RequestLogMiddleware;
use BenyCode\Slim\RequestLoggerMiddleware\ResponseLogMiddleware;
use BenyCode\Slim\RequestLoggerMiddleware\RequestLog\FileSystemLog;
use ....\AnyLogClass;
return [
    ......
    RequestLogMiddleware::class => function (ContainerInterface $container) {

        $requestLog = new AnyLogClass(....);

        return new RequestLogMiddleware($requestLog);
    },
    ResponseLogMiddleware::class => function (ContainerInterface $container) {

        $requestLog = new AnyLogClass(....);

        return new ResponseLogMiddleware($requestLog);
    },
];