benycode / slim-request-logger-middleware
一个用于请求日志的轻量级中间件
v0.0.1
2022-07-06 13:37 UTC
Requires
- php: ^8.0
Requires (Dev)
- bamarni/composer-bin-plugin: ^1.4.1
- php-di/php-di: ^6.3
- phpunit/phpunit: ^8.0 || ^9.0
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); }, ];