Closed
Description
Hi, I have a question, this might be a bug or maybe I don't know sth.
My question concerns these lines from WebMvcMetricsFilter
class:
catch (NestedServletException ex) {
response.setStatus(HttpStatus.INTERNAL_SERVER_ERROR.value());
record(timingContext, request, response, ex.getCause());
throw ex;
}
catch (ServletException | IOException | RuntimeException ex) {
record(timingContext, request, response, ex);
throw ex;
}
Why for NestedServletException
the response status is set to INTERNAL_SERVER_ERROR
but for the latter exceptions (ServletException | IOException | RuntimeException
) it is not?
I had a case where one of my custom filters was throwing I/O error (ResourceAccessException
with IOException
as a cause), resulting in 500 response from an endpoint, but in metrics it wasn't recorded with status 500, but rather with status 200 - because it got caught by the second catch
clause.
Such behaviour may lead to incorrect metrics and undetected issues in applications.