### GET /api/boom: controller throws, @RestControllerAdvice handles it
HTTP 500  body={"handled":"controller boom"}
01 REQUEST  filter:raw(order 5)            before chain
02 REQUEST  filter:accessLog(order 10)     before chain GET /api/boom
03 REQUEST  servlet:DispatcherServlet      doDispatch start
04 REQUEST  interceptor:A                  preHandle  handler=HandlerMethod HelloController#boom
05 REQUEST  interceptor:B                  preHandle  handler=HandlerMethod HelloController#boom
06 REQUEST  aspect:controller              before HelloController#boom args=[]
07 REQUEST  controller                     boom() about to throw
08 REQUEST  aspect:controller              after  HelloController#boom THREW IllegalStateException
09 REQUEST  advice:@ExceptionHandler       handling IllegalStateException: controller boom
10 REQUEST  interceptor:B                  afterCompletion ex=null
11 REQUEST  interceptor:A                  afterCompletion ex=null
12 REQUEST  servlet:DispatcherServlet      doDispatch end
13 REQUEST  filter:accessLog(order 10)     after chain status=500 asyncStarted=false
14 REQUEST  filter:raw(order 5)            after chain

### GET /api/service-boom: the service throws, the controller never catches
HTTP 500  body={"handled":"service boom"}
01 REQUEST  filter:raw(order 5)            before chain
02 REQUEST  filter:accessLog(order 10)     before chain GET /api/service-boom
03 REQUEST  servlet:DispatcherServlet      doDispatch start
04 REQUEST  interceptor:A                  preHandle  handler=HandlerMethod HelloController#serviceBoom
05 REQUEST  interceptor:B                  preHandle  handler=HandlerMethod HelloController#serviceBoom
06 REQUEST  aspect:controller              before HelloController#serviceBoom args=[]
07 REQUEST  aspect:service                 before GreetingService#fail args=[]
08 REQUEST  aspect:service                 after  GreetingService#fail THREW IllegalStateException
09 REQUEST  aspect:controller              after  HelloController#serviceBoom THREW IllegalStateException
10 REQUEST  advice:@ExceptionHandler       handling IllegalStateException: service boom
11 REQUEST  interceptor:B                  afterCompletion ex=null
12 REQUEST  interceptor:A                  afterCompletion ex=null
13 REQUEST  servlet:DispatcherServlet      doDispatch end
14 REQUEST  filter:accessLog(order 10)     after chain status=500 asyncStarted=false
15 REQUEST  filter:raw(order 5)            after chain

### GET /api/unhandled: nobody handles it, Boot's /error takes over
HTTP 500  body={"timestamp":"...","status":500,"error":"Internal Server Error","path":"/api/unhandled"}
01 REQUEST  filter:raw(order 5)            before chain
02 REQUEST  filter:accessLog(order 10)     before chain GET /api/unhandled
03 REQUEST  servlet:DispatcherServlet      doDispatch start
04 REQUEST  interceptor:A                  preHandle  handler=HandlerMethod HelloController#unhandled
05 REQUEST  interceptor:B                  preHandle  handler=HandlerMethod HelloController#unhandled
06 REQUEST  aspect:controller              before HelloController#unhandled args=[]
07 REQUEST  controller                     unhandled() about to throw
08 REQUEST  aspect:controller              after  HelloController#unhandled THREW UnsupportedOperationException
09 REQUEST  interceptor:B                  afterCompletion ex=UnsupportedOperationException
10 REQUEST  interceptor:A                  afterCompletion ex=UnsupportedOperationException
11 REQUEST  servlet:DispatcherServlet      doDispatch end
12 REQUEST  filter:accessLog(order 10)     after chain status=200 asyncStarted=false
13 REQUEST  filter:raw(order 5)            after chain
14 ERROR    servlet:DispatcherServlet      doDispatch start
15 ERROR    interceptor:A                  preHandle  handler=HandlerMethod BasicErrorController#error
16 ERROR    interceptor:A                    error attributes: status=500 exception=ServletException
17 ERROR    interceptor:B                  preHandle  handler=HandlerMethod BasicErrorController#error
18 ERROR    interceptor:B                  postHandle status=500 modelAndView=null
19 ERROR    interceptor:A                  postHandle status=500 modelAndView=null
20 ERROR    interceptor:B                  afterCompletion ex=null
21 ERROR    interceptor:A                  afterCompletion ex=null
22 ERROR    servlet:DispatcherServlet      doDispatch end

### GET /api/hello/x with X-Filter-Throw: the FILTER throws
HTTP 500  body={"timestamp":"...","status":500,"error":"Internal Server Error","path":"/api/hello/x"}
01 REQUEST  filter:raw(order 5)            before chain
02 REQUEST  filter:accessLog(order 10)     before chain GET /api/hello/x
03 REQUEST  filter:fault(order 40)         throwing IllegalStateException
04 REQUEST  filter:accessLog(order 10)     after chain status=200 asyncStarted=false
05 REQUEST  filter:raw(order 5)            after chain
06 ERROR    servlet:DispatcherServlet      doDispatch start
07 ERROR    interceptor:A                  preHandle  handler=HandlerMethod BasicErrorController#error
08 ERROR    interceptor:A                    error attributes: status=500 exception=IllegalStateException
09 ERROR    interceptor:B                  preHandle  handler=HandlerMethod BasicErrorController#error
10 ERROR    interceptor:B                  postHandle status=500 modelAndView=null
11 ERROR    interceptor:A                  postHandle status=500 modelAndView=null
12 ERROR    interceptor:B                  afterCompletion ex=null
13 ERROR    interceptor:A                  afterCompletion ex=null
14 ERROR    servlet:DispatcherServlet      doDispatch end
