当我们的系统发生异常时,我们记录相应参数的日志有助于我们查看线上问题,特别是线上的用户众多,当客服反馈某某用户做了什么操作,发生了什么问题,这时参数的作用就体现出来了。那如果我们不记录异常的请求的参数,那么我们很难回溯当初发生问题时的参数场景,难以分析问题所再,甚至线上异常日志非常多,但是你找不到你需要的那条。这就有点尴尬了
@ControllerAdvice
public class AspectController {
protected final Logger logger = LoggerFactory.getLogger(AspectController.class);
@ExceptionHandler(Exception.class)
public ResultDTO handleException(RuntimeException ex) {
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest();
request.getParameterMap();
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append(" 请求url:") //记录请求的url
.append(request.getRequestURI())
.append(" url参数:")//记录请求的url后面的参数
.append(request.getQueryString())
.append(" userAgent") //记录请求总苏想你想你
.append(request.getHeader(" user-agent")) //记录请求终端信息
.append(" uid") //记录用户信息
.append(request.getHeader(" userId"));
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(request.getInputStream()));
stringBuilder.append(" body:") //记录请求体body信息
.append(reader.readLine());
} catch (IOException e) {
e.printStackTrace();
}
logger.error("你想要打印的异常:请求信息: " + stringBuilder.toString(), ex);
return ResultDTO.error();
}
}
如果你有更多需要的参数,可以继续添加 哦