Handler.php 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | saiadmin [ saiadmin快速开发框架 ]
  4. // +----------------------------------------------------------------------
  5. // | Author: sai <1430792918@qq.com>
  6. // +----------------------------------------------------------------------
  7. namespace plugin\saiadmin\app\exception;
  8. use Throwable;
  9. use Webman\Http\Request;
  10. use Webman\Http\Response;
  11. use Webman\Exception\ExceptionHandler;
  12. use plugin\saiadmin\exception\ApiException;
  13. /**
  14. * 异常处理类
  15. */
  16. class Handler extends ExceptionHandler
  17. {
  18. public $dontReport = [
  19. ApiException::class,
  20. ];
  21. public function report(Throwable $exception)
  22. {
  23. if ($this->shouldntReport($exception)) {
  24. return;
  25. }
  26. $logs = '';
  27. if ($request = \request()) {
  28. $user = getCurrentInfo();
  29. $logs .= $request->method() . ' ' . $request->uri();
  30. $logs .= PHP_EOL . '[request_param]: ' . json_encode($request->all());
  31. $logs .= PHP_EOL . '[timestamp]: ' . date('Y-m-d H:i:s');
  32. $logs .= PHP_EOL . '[client_ip]: ' . $request->getRealIp();
  33. $logs .= PHP_EOL . '[action_user]: ' . var_export($user, true);
  34. $logs .= PHP_EOL . '[exception_handle]: ' . get_class($exception);
  35. $logs .= PHP_EOL . '[exception_info]: ' . PHP_EOL . $exception;
  36. }
  37. $this->logger->error($logs);
  38. }
  39. public function render(Request $request, Throwable $exception): Response
  40. {
  41. $debug = config('app.debug', true);
  42. $code = $exception->getCode();
  43. $json = [
  44. 'code' => $code ? $code : 500,
  45. 'message' => $code !== 500 ? $exception->getMessage() : 'Server internal error',
  46. 'type' => 'failed'
  47. ];
  48. if ($debug) {
  49. $json['request_url'] = $request->method() . ' ' . $request->uri();
  50. $json['timestamp'] = date('Y-m-d H:i:s');
  51. $json['client_ip'] = $request->getRealIp();
  52. $json['request_param'] = $request->all();
  53. $json['exception_handle'] = get_class($exception);
  54. $json['exception_info'] = [
  55. 'code' => $exception->getCode(),
  56. 'message' => $exception->getMessage(),
  57. 'file' => $exception->getFile(),
  58. 'line' => $exception->getLine(),
  59. 'trace' => explode("\n", $exception->getTraceAsString())
  60. ];
  61. }
  62. return new Response(200, ['Content-Type' => 'application/json;charset=utf-8'], json_encode($json));
  63. }
  64. }