如何创建不将WARN消息记录到日志的Spring @ExceptionHandler方法

Gar*_*ary 6 java spring spring-mvc spring-boot

我有这个Spring @ExceptionHandler,它主要做我想要的.它将HTTP状态代码设置为409,并在JSON响应中包含额外的错误信息.

@ExceptionHandler(PolicyExecutionException.class)
public ResponseEntity handleException(PolicyExecutionException se){
    return ResponseEntity.status(HttpStatus.CONFLICT).body(se.getScriptErrorMap());
}
Run Code Online (Sandbox Code Playgroud)

我注意到的是,即使它向客户端提供了正确的响应,Spring也会在WARN级别记录消息.我的信息很长,只与客户有关.我宁愿不在服务器端登录它.这可以关掉吗?

2017-06-19 18:48:10,659 [p-nio-8060-exec-2] WARN oswsmmaExceptionHandlerExceptionResolver - 由Handler执行引起的已解决异常:

我使用的另一种方法是捕获PolicyExecutionException每个可以抛出它的Controller方法.如果可能的话,这会导致额外的样板.

Sot*_*lis 6

AbstractHandlerExceptionResolver,一个超类型ExceptionHandlerExceptionResolver,维护一个warnLogger用于在解决异常时记录该消息,由...控制setWarnLogCategory.

默认是没有警告日志记录.指定此设置可激活警告登录到特定类别.或者,覆盖logException(java.lang.Exception, javax.servlet.http.HttpServletRequest)自定义日志记录的 方法.

当您创建ExceptionHandlerExceptionResolver(或通过默认配置为您创建)时,它被设置为null不使用.

使用Spring Boot,您可以控制是否启用了

spring.mvc.logResolvedException
Run Code Online (Sandbox Code Playgroud)

申请财产.这将控制相应的值WebMvcProperties.(false默认情况下,您必须将其设置为true您的配置,或者您已setWarnLogCategory明确调用.)


或者,关闭记录器.

  • `spring.mvc.log-resolved-exception`默认为`false`,但spring-boot-devtools将其设置为`true`,可能是为了便于开发中的调试.请参阅[DevToolsPropertyDefaultsPostProcessor](https://github.com/spring-projects/spring-boot/blob/v1.5.7.RELEASE/spring-boot-devtools/src/main/java/org/springframework/boot/devtools/env /DevToolsPropertyDefaultsPostProcessor.java#L58).所以你可能不需要设置它. (5认同)
  • 是的,你是对的.设置`spring.mvc.log-resolved-exception = false`会关闭此日志记录.即使它适用于所有例外情况,它对我来说也可能足够好.我还跟踪了我的配置如何记录此警告,即使我从未明确打开此日志记录.我正在使用Spring dev-tools,它在DevToolsPropertyDefaultsPostProcessor中将此属性设置为true. (2认同)