、SimpleMappingExceptionResolver
はMissingServletRequestParameterException
をログに記録することはできません使用して、私はログを行うには@ControllerAdvice
とFilter
を組み合わせます。
ControllerAdvice
を使用して、Spring MVCコントローラで発生したThrowableをキャッチします。
@ControllerAdvice
public class GlobalDefaultExceptionHandler {
private static final Logger logger = LoggerFactory.getLogger("global_controller_exception_logger");
@ExceptionHandler(value = Throwable.class)
public void defaultErrorHandler(Throwable e) throws Throwable {
// If the exception is annotated with @ResponseStatus rethrow it and let
// the framework handle it.
// AnnotationUtils is a Spring Framework utility class.
if (AnnotationUtils.findAnnotation
(e.getClass(), ResponseStatus.class) != null) {
throw e;
}
// Otherwise log exception
logger.error("global controller default exception handler", e);
throw e;
}
@ExceptionHandler(MissingServletRequestParameterException.class)
public void httpBadRequest(Exception e, HttpServletRequest request) throws Exception {
StringBuffer requestURL = request.getRequestURL();
logger.warn("{} HTTP Status 400 - {}", requestURL, e.getMessage());
throw e;
}
}
追加の例外をキャッチするにはFilter
を使用します。
@WebFilter(
filterName = "ExceptionLogFilter",
urlPatterns = "/*",
dispatcherTypes = {DispatcherType.REQUEST, DispatcherType.ASYNC, DispatcherType.ERROR}
)
public class ExceptionLogFilter implements Filter {
private static final Logger logger = LoggerFactory.getLogger("global_filter_exception_logger");
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
try {
chain.doFilter(request, response);
} catch (IOException | ServletException e) {
logger.error("bad thing happened during doFilter", e);
throw e;
}
}
......
}
logback設定
<logger name="global_controller_exception_logger" level="info"/>
<logger name="global_filter_exception_logger" level="info"/>
あなたは完全なコードのためmy gistを表示することができます。
このメソッドを使用すると、どのような例外が見逃されるのですか。それらを取得する方法はありますか? –
良い点。私は長い間、春を今使っておらず、覚えていません。私は上記のもう少し詳しい情報を含める必要があります。私が上で暗示したように、この時点での私の最高の推測は 'RuntimeException'から派生した例外です。 –