我們使用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 /卡塔利娜/叢林狼內部設置,並且不能從外部改變(作爲響應被設置承諾)。
是否有可能以某種方式區分「真正的」內部服務器錯誤和「正好」連接中止?