log-record icon indicating copy to clipboard operation
log-record copied to clipboard

关于自定义 success、exception 和全局异常处理的顺序问题

Open duanluan opened this issue 1 year ago • 2 comments

目前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());

    // ……
  }
  1. 上文代码中的LogRecordContext.putVariable("exception", sw.toString());仅为我的猜想,能否通过这种方式去设置LogDTO.exception的值(put 中可以特殊点叫 $exception 或者加新方法),不然每个@OperationLog都要加属性(当然现在还没有可以配置exception的属性)。

  2. 假设可以自定义LogDTO.exception的值的话,GlobalExceptionHandler.handlerException的执行顺序也总是在createLog方法后,@Order注解无效。或者 LogDTO 可以获取到 Exception 对象也行。

duanluan avatar Aug 01 '23 04:08 duanluan

收到了

qqxx6661 avatar Aug 03 '23 01:08 qqxx6661