代碼里我這邊如果數(shù)據(jù)校驗(yàn)不通過(guò),會(huì)直接拋出exception\ValidateException的異常,使用上沒(méi)有什么問(wèn)題,但是wenman記錄了很多這種異常
還有一些自己主動(dòng)拋出的自定義的異常,使用上也沒(méi)有問(wèn)題,但是webman也記錄了,像上面說(shuō)的這兩種異常,我是不希望記錄到webman.log中的,反而會(huì)影響到排查真正的問(wèn)題
就是怎么讓webman不去記錄那些特定的異常?
我在app下的ExceptionHandler.php中對(duì)異常進(jìn)行的攔截處理,并返回的json,這個(gè)處理后,接口正常返回了錯(cuò)誤的json信息,但是webman.log中還會(huì)再記錄一次
ApiException繼承的是BadRequestHttpException,我在使用 throw new ApiException() 主動(dòng)拋出錯(cuò)誤時(shí),日志并沒(méi)有記錄錯(cuò)誤信息
解決了
查看了下app\Exception的基類,有一個(gè)report方法,會(huì)記錄異常的日志,把這個(gè)方法,復(fù)制到app\Exception進(jìn)行重寫,把不需要記錄日志的類列出來(lái),提前return就行了,下面是示例代碼,可以參考一下
public function report(Throwable $exception)
{
//下面這幾個(gè)異常,是我單列出來(lái)不記錄日志的異常
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);
}