webman如何记录http请求日志?
webman如何记录http请求日志?我想用webman做api后端开发,前端请求接口的时候,提示404,我不知道完整的请求url,怎么记录完整的http请求日志呢?
给你一个我在用的方法,作用是有接口请求时在控制台显示请求信息。 新建中间件,在目录 app\common\middleware 下新建 RequestDebug.php 文件,内容如下:
<?php declare(strict_types=1); namespace app\common\middleware; use Webman\Http\Request; use Webman\Http\Response; use Webman\MiddlewareInterface; // 请求调试中间件,在控制台打印请求的路径和数据 class RequestDebug implements MiddlewareInterface { // 显示请求信息 public static function showRequestInfo(Request $request) { $now = date('Y-m-d H:i:s'); echo "================================== 请求开始 {$now} ====================================", PHP_EOL; echo '请求路径:'; echo $request->path(), PHP_EOL; echo '完整路径:'; echo $request->fullUrl(), PHP_EOL; echo '请求数据:', PHP_EOL; echo json_encode($request->all(), JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT), PHP_EOL; echo '请求头数据:', PHP_EOL; echo json_encode($request->header(), JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT), PHP_EOL; } public function process(Request $request, callable $handler): Response { $start_time = microtime(true); self::showRequestInfo($request); $response = $handler($request); $end_time = microtime(true); $cost_time = ($end_time - $start_time) * 1000; echo "响应数据:", PHP_EOL; echo $response->rawBody(), PHP_EOL; $now = date('Y-m-d H:i:s'); echo "================================== 请求结束 {$now} 耗时:{$cost_time}MS ====================================", PHP_EOL; return $response; } }
在 config/middleware.php 文件中注册该中间件:
return [ // 全局中间件 '' => [ app\common\middleware\RequestDebug::class, // ... 这里省略其它中间件 ], ];
正常请求就可以显示请求信息了,但是如果请求的路由不存在,显示404时该中间件是不起作用的,这时候要用路由的fallback功能了。在config/route.php文件中新增以下代码:
Route::fallback(function (Request $request) { \app\common\middleware\RequestDebug::showRequestInfo($request); // 后续处理流程 });
大功告成,404请求也会显示请求信息了。具体需要显示的请求信息你可以自己修改。
謝謝,是使用中間件。
(string)$response 这是最好的日志
收藏了
给你一个我在用的方法,作用是有接口请求时在控制台显示请求信息。
新建中间件,在目录 app\common\middleware 下新建 RequestDebug.php 文件,内容如下:
在 config/middleware.php 文件中注册该中间件:
正常请求就可以显示请求信息了,但是如果请求的路由不存在,显示404时该中间件是不起作用的,这时候要用路由的fallback功能了。在config/route.php文件中新增以下代码:
大功告成,404请求也会显示请求信息了。具体需要显示的请求信息你可以自己修改。
謝謝,是使用中間件。
(string)$response 这是最好的日志
收藏了