我们使用Kibana设置了一些仪表板和可视化,以监视由tomcat为我们的spring引导web应用程序生成的accesslog。Tomcat中的HTTP状态代码500 ClientAbortException/BrokenPipe上的AccesLog
我们特别关注已通过Statuscode 5xx回答的请求。
事实证明,如果客户端请求资源,并且请求正在进行中,取消请求(带有ClientAbortException/BrokenPipe
错误),则ResponseCode设置为500,并且应用程序日志中不记录任何错误(这是种类好的)。
我们现在想要将ResponseCode更改为不同于500的值,以便更好地区分“真正的”内部服务器错误和“由客户端发起的预期连接中止”。
THEREFOR予实现的的ExceptionHandler如下:
@RestControllerAdvice
public class HttpRequestExceptionHandler {
private final static Logger LOGGER = LoggerFactory.getLogger(HttpRequestExceptionHandler.class);
@ExceptionHandler(value = { ClientAbortException.class })
@ResponseBody
public ResponseEntity<String> exceptionHandler(Exception e, HttpServletResponse res) {
res.setStatus(299);
//res.sendError(299);
LOGGER.error(""+res.getStatus());
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(null);
}
}
事实证明虽然,的StatusCode 500被Tomcat /卡塔利娜/丛林狼内部设置,并且不能从外部改变(作为响应被设置承诺)。
是否有可能以某种方式区分“真正的”内部服务器错误和“正好”连接中止?