/** * Copyright (c) 2018 人人开源 All rights reserved. * * https://www.renren.io * * 版权所有,侵权必究! */ package com.zt.core.exception; import cn.hutool.core.map.MapUtil; import com.alibaba.fastjson.JSON; import com.zt.common.exception.ErrorCode; import com.zt.common.exception.ExceptionUtils; import com.zt.common.exception.RenException; import com.zt.common.servlet.Result; import com.zt.common.utils.HttpContextUtils; import com.zt.common.utils.IpUtils; import com.zt.modules.log.model.SysLogError; import com.zt.modules.log.service.SysLogErrorService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.DuplicateKeyException; import org.springframework.http.HttpHeaders; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RestControllerAdvice; import javax.servlet.http.HttpServletRequest; import java.util.Map; /** * 异常处理器 * * @author Mark sunlightcs@gmail.com * @since 1.0.0 */ @RestControllerAdvice public class RenExceptionHandler { private static final Logger logger = LoggerFactory.getLogger(RenExceptionHandler.class); @Autowired private SysLogErrorService sysLogErrorService; /** * 处理自定义异常 */ @ExceptionHandler(RenException.class) public Result handleRenException(RenException ex) { Result result = Result.ok(); result = result.error(ex.getCode(), ex.getMsg()); return result; } @ExceptionHandler(DuplicateKeyException.class) public Result handleDuplicateKeyException(DuplicateKeyException ex) { Result result = Result.ok(); result.error(ErrorCode.DB_RECORD_EXISTS); return result; } @ExceptionHandler(Exception.class) public Result handleException(Exception ex) { logger.error(ex.getMessage(), ex); saveLog(ex); return Result.ok().error(); } /** * 保存异常日志 */ private void saveLog(Exception ex) { SysLogError log = new SysLogError(); // 请求相关信息 HttpServletRequest request = HttpContextUtils.getHttpServletRequest(); log.setIp(IpUtils.getIpAddr(request)); log.setUserAgent(request.getHeader(HttpHeaders.USER_AGENT)); log.setRequestUri(request.getRequestURI()); log.setRequestMethod(request.getMethod()); Map params = HttpContextUtils.getParameterMap(request); if (MapUtil.isNotEmpty(params)) { log.setRequestParams(JSON.toJSONString(params)); } // 异常信息 log.setErrorInfo(ExceptionUtils.getErrorStackTrace(ex)); // 新增 sysLogErrorService.insert(log); } }