自定义的异常和validate的异常,能不能不记录到webman-2023.log中

kylin87

问题描述

代码里我这边如果数据校验不通过,会直接抛出exception\ValidateException的异常,使用上没有什么问题,但是wenman记录了很多这种异常
还有一些自己主动抛出的自定义的异常,使用上也没有问题,但是webman也记录了,像上面说的这两种异常,我是不希望记录到webman.log中的,反而会影响到排查真正的问题

就是怎么让webman不去记录那些特定的异常?

为此你搜索到了哪些方案及不适用的原因

我在app下的ExceptionHandler.php中对异常进行的拦截处理,并返回的json,这个处理后,接口正常返回了错误的json信息,但是webman.log中还会再记录一次

317 2 1
2个回答

软饭工程师

截图
截图
ApiException继承的是BadRequestHttpException,我在使用 throw new ApiException() 主动抛出错误时,日志并没有记录错误信息

  • 暂无评论
kylin87

解决了
查看了下app\Exception的基类,有一个report方法,会记录异常的日志,把这个方法,复制到app\Exception进行重写,把不需要记录日志的类列出来,提前return就行了,下面是示例代码,可以参考一下

public function report(Throwable $exception)
    {
        //下面这几个异常,是我单列出来不记录日志的异常
        if ($exception instanceof FailedException ||
            $exception instanceof ValidateException ||
            $exception instanceof Abort ||
            $exception instanceof JwtTokenException ||
            $exception instanceof JwtTokenExpiredException) {
            return;
        }
        $logs = '';
        if ($request = \request()) {
            $logs = $request->getRealIp() . ' ' . $request->method() . ' ' . trim($request->fullUrl(), '/');
        }
        $this->logger->error($logs . PHP_EOL . $exception);
    }
  • 暂无评论
🔝