san4io / request-logger
Laravel 请求响应记录器
Requires
- php: >=7.1
- laravel/framework: 5.5.*
- monolog/monolog: ~1.12
This package is not auto-updated.
Last update: 2024-09-25 03:10:24 UTC
README
用于记录 Laravel HTTP 请求的包。默认使用 Monolog with LogStash 格式化器,但可以在 ServiceProvider 中重写,请参考高级配置部分。
安装
您可以通过 composer 安装此包
composer require san4io/request-logger
您可以发布配置
php artisan vendor:publish --provider="San4io\RequestLogger\RequestLoggerServiceProvider"
配置
在 request-logger.php
配置文件中,您可以找到当前属性
使用方法
在全局中间件中
// in `app/Http/Kernel.php` protected $middleware = [ ... \San4io\RequestLogger\Middleware\RequestLoggerMiddleware::class ];
在路由组中
// in a routes file Route::group(['middleware' => \San4io\RequestLogger\Middleware\RequestLoggerMiddleware::class], function () { // });
在单个路由中
// in a routes file Route::get('/', function () { // })->middleware(\San4io\RequestLogger\Middleware\RequestLoggerMiddleware::class);
默认日志上下文格式化器
扩展
您可以使用自己的 ContextFormatters 扩展您的 Logger。
您的上下文格式化器应扩展 \San4io\RequestLogger\Contracts\ContextFormatterContract
接口。在 format
方法中,应返回您希望输出的内容。在 name
方法中,您应返回格式化器的 唯一 名称
高级配置
重写 Logger
您可以通过将您的 logger 绑定到 'app.request.logger'
在 ServiceProvider 中重写 logger。例如,您想使用 MongoDBFormatter 这样的其他格式化器。
// YourServiceProvider.php public function register() { $this->app->bind('app.request.logger', function () { $logger = new Logger('request-logger'); $handler = new RotatingFileHandler( storage_path(config('request-logger.storage_path')) ); // Changing Handler $handler->setFormatter(new MongoDBFormatter( env('APP_NAME'), null, null, null )); $logger->pushHandler($handler); return $logger; }); }
这就完成了,您已经设置了使用所需格式化器的 logger。
或者,您可以创建一个具有不同名称的自己的 logger,并将其注入到 RequestLogger
中,例如
//YourServiceProvider.php public function register() { $this->app->bind('my_mega_super_dupper_logger', function () { ... return $logger; }); $this->app->bind(RequestLogger::class, function (Application $app) { return new RequestLogger( // Injecting your logger $app->make('my_mega_super_dupper_logger'), $app->make(LogContextFormatter::class) ); }); }
重写 LogContextFormatter
您可能需要返回一些附加数据到您的日志中。在这种情况下,您应扩展 \San4io\RequestLogger\Contracts\ContextFormatterContract
接口(请参阅扩展部分)并将其添加到 LogContextFormatter。示例
// YourServiceProvider.php public function register() { // Totally override LogContextFormatter, in this case it will return only your data. $this->app->bind(LogContextFormatter::class, function (Application $app) { $contextFormatter = new LogContextFormatter(); $contextFormatter->addContextFormatter($app->make(YourContextFormatter::class)); return $contextFormatter; }); // Adding additional contexts to default ones. $this->app->bind(LogContextFormatter::class, function (Application $app) { $contextFormatter = $app->make(LogContextFormatter::class); $contextFormatter->addContextFormatter($app->make(YourContextFormatter::class)); return $contextFormatter; }); }
路线图
- 测试
贡献
欢迎任何贡献!
日志示例
{ "@timestamp":"2017-11-05T13:49:24.308258+00:00", "@source":"3b1ceb06851b", "@fields":{ "channel":"request-logger", "level":200, "request_ip":"192.22.22.11", "request_method":"POST", "request_uri":"https:///api/v1/authenticate", "request_params":{ "email":"qwe" }, "request_headers":{ "cookie":[ "Phpstorm-f176c91a=b5df2557-0cd3-44be-857d-7ea59b93c24a; io=Xm-fflHJzYnRSle0AAAB; JSESSIONID.41a4f06a=ux60gwkijzfr1cleylxjci7po; _nsuid=d3c208ab-5937-4e2c-a974-7ae2c71b8c43; ns.welcomemessage.displayed=true; user=undefined; token=undefined; refreshToken=Bunn1cX7CBS1VdS%2BfbWAY12oQOD0utiDGW5jKAK06two2a0eWOMwxhetPiAe3Ao73IX5fP56UymvucykD6ZbXT4sJvyorXUR%2FNph%2FuamwK2zkE%2F%2Bh8iUqPzK5qluRWklHtZV0AXUTxjTEok3hcksRTus2uxLz3cff1JMpwXJwzEYT8Oi1WxVj8WU7XzTevskrvoil1gtRkQKKq5porjntD2nk3IU4vCNvA6HnlRIeHpz2uooXNZYRJzpbpbZBXQTUDPEu9g7psspBbhnBw87ymvxGUqrWaWr9axtDSalkuNA1UFOgoQO3hjR864xEhiGKfGVsZvQYov4I5OEDcbt45xmNE1ZE6thgSbZqGAGdQDIvnpJf%2FAkImy48sfJ4DIduziP9SBbJvgRmVblnyUDQshCg2Gm1dEi6nGuqr2iUbmzTYgACaWUkRL67oCG0fIq18vrpNcxXXbhKtd3SIHx1lrSRN%2Bg0IjFD30QnquvXpJ09OvoOp5WF6fbz5yjfrK4E%2BSg7QOEleKJZeVM2Ax2u%2BH2ED1GsWkuYy7L7GtfBAL7QfDOvY9DgFGtL4lXOxu8b10IHxI9806J1gARvFojwrpCi4wQpyui%2F9Y1WKbCK0ii2IXk6aBq%2F917znc%2FycXOFCTtxgv5O5t9ed9E7%2BYO75%2FOWCJibn%2FI2bSLGm8VC8U%3D; accessToken=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImp0aSI6ImVhZDA0MDJiYjM2YmY3Mjc2Y2UxMGUzNTYxNmU1NGEwY2RmZTMyY2M1MTQ1NjExNDQ0ZGQyMDhhNGQ3OGNiZWNhZWU5NjM5YzdiOGQ2YTllIn0.eyJhdWQiOiI1ODdkMmFkMzljOWMwYjJhMTgyMmMyNjQiLCJqdGkiOiJlYWQwNDAyYmIzNmJmNzI3NmNlMTBlMzU2MTZlNTRhMGNkZmUzMmNjNTE0NTYxMTQ0NGRkMjA4YTRkNzhjYmVjYWVlOTYzOWM3YjhkNmE5ZSIsImlhdCI6MTQ5NDE1ODY5NiwibmJmIjoxNDk0MTU4Njk2LCJleHAiOjE1MjU2OTQ2OTYsInN1YiI6IjU5MGYwZDY4OWM5YzBiMzIyOTUzZDQwNCIsInNjb3BlcyI6WyIqIl19.HeVwuLNYmNYIsy9J-9uP3_sMa03XCddLLrkZVRqllUgB7Epx1YjQr4WiZgWF0uJl_JE0AxupavzOx94l-eCTau9UBT4EzRHpbB1wcKhy6mw4N2YYeYwHjJQ46gEN5idfASLsICgcrA5puXCZcn2iCopM-qQz2H7Hgxin_nga-X756C4_hCLR-fQZMw5PbKdKcAv63U8HlmsRsjdmkfintEW_eUrHW3uApExNbTGcluAxDwTL3WNVDAGlaWGXbyhDuMLksW22gUNjjCz8WfRXhyycnKuafiLZNOSq2U5GtT5erAalTn2yw5CIfwD-P2xvujjE54sgxQPjO9kC1H2m8fHqNrvEGHGroA6IWIrh5ko-0FsXRVtuHXEF9MTBB1_O-YGGZ2dzrt6zWuq3PW2pLCYgFBiDepcLjcnk_RkfsahgT6lVEKJc9vo0779cC5kStcBzP3iqtaGhcrptn9BSql6H8VktzS8FwgjQLJfMfG9VziQVoJz6wAw2aAdIkidQqVwp8jAuDQEU6TqQZc0Y9dtzcc1G-zF9Cqlv5AcR45tMWFX9UZxout6BrCdFvxSgWdl35QlgfYNNkxEwK0swvGH83WbnmNhy7OmtU4FKkmFWEDQA7GYxqnLKNYtSYoON3BhDzKeDoX6-z2Cb8mMHQoTQ6dud1syKdzxb-ekfqaY; JSESSIONID.ffeb04b9=1buw5fipdaki21qjk09qphnlrn; XDEBUG_SESSION=PHPSTORM; JSESSIONID.a11d2002=node01iw7cp8duqs3vmec8szk9ni3c1.node0; screenResolution=1920x1080" ], "accept-language":[ "ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7,lt;q=0.6,it;q=0.5" ], "accept-encoding":[ "gzip, deflate, br" ], "referer":[ "https:///api/documentation" ], "content-type":[ "multipart/form-data; boundary=----WebKitFormBoundaryNm6iocezUxk36GAH" ], "user-agent":[ "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/62.0.3202.62 Chrome/62.0.3202.62 Safari/537.36" ], "origin":[ "https://" ], "accept":[ "application/json" ], "cache-control":[ "no-cache" ], "pragma":[ "no-cache" ], "content-length":[ "237" ], "connection":[ "keep-alive" ], "host":[ "localhost" ] }, "response_content":"{\"message\":\"The given data was invalid.\",\"errors\":{\"email\":[\"The email must be a valid email address.\"]}}", "response_ms":0.121142101287842 }, "@message":"POST https:///api/v1/authenticate", "@tags":[ "request-logger" ], "@type":"TestApplication" }