log-record
log-record copied to clipboard
关于自定义 success、exception 和全局异常处理的顺序问题
目前createLog
方法中LogDTO.exception
获取的仅为e.getMessage()
,而我想获取的是e.printStackTrace()
的内容。
大多项目都会有一个全局异常处理。
GlobalExceptionHandler
:
/**
* 全局异常处理
*/
@Slf4j
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(value = Exception.class)
@ResponseBody
public ApiResponse<String> handlerException(Exception e) {
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
e.printStackTrace(pw);
LogRecordContext.putVariable("exception", sw.toString());
// ……
}
-
上文代码中的
LogRecordContext.putVariable("exception", sw.toString());
仅为我的猜想,能否通过这种方式去设置LogDTO.exception
的值(put 中可以特殊点叫 $exception 或者加新方法),不然每个@OperationLog
都要加属性(当然现在还没有可以配置exception
的属性)。 -
假设可以自定义
LogDTO.exception
的值的话,GlobalExceptionHandler.handlerException
的执行顺序也总是在createLog
方法后,@Order
注解无效。或者 LogDTO 可以获取到 Exception 对象也行。
收到了