AdminRequestLogMiddleware.php 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. <?php
  2. namespace App\Http\Middleware;
  3. use App\Module\System\Services\RequestLogger;
  4. use Closure;
  5. use Illuminate\Http\Request;
  6. class AdminRequestLogMiddleware
  7. {
  8. /**
  9. * 处理后台请求日志记录
  10. *
  11. * @param \Illuminate\Http\Request $request
  12. * @param \Closure $next
  13. * @return mixed
  14. */
  15. public function handle(Request $request, Closure $next)
  16. {
  17. $startTime = microtime(true);
  18. // 创建请求日志
  19. $logger = new RequestLogger($request);
  20. // 设置路由信息
  21. $logger->setRouter($request->path());
  22. // 设置用户ID(如果已登录)
  23. if ($user = $request->user('admin')) {
  24. $logger->setUserId($user->id);
  25. }
  26. try {
  27. $response = $next($request);
  28. // 记录响应
  29. if (method_exists($response, 'getContent')) {
  30. $content = $response->getContent();
  31. if (is_string($content) && is_json($content)) {
  32. $logger->setJsonResponse($content);
  33. }
  34. }
  35. } catch (\Exception $e) {
  36. // 记录错误
  37. $logger->setError($e->getMessage());
  38. throw $e;
  39. } finally {
  40. // 记录运行时间
  41. $logger->setRunTime($startTime);
  42. }
  43. return $response;
  44. }
  45. }
  46. if (!function_exists('is_json')) {
  47. function is_json($string) {
  48. json_decode($string);
  49. return json_last_error() === JSON_ERROR_NONE;
  50. }
  51. }