From acab3839bd996602f2025c1795e49a54e9b048c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=A2=81=E5=AE=87=E5=A5=87?= Date: Thu, 13 Nov 2025 14:03:17 +0800 Subject: [PATCH] =?UTF-8?q?=E9=A3=9E=E4=B9=A6=E9=80=9A=E7=9F=A5=E3=80=81?= =?UTF-8?q?=E6=97=A5=E5=BF=97=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ruoyi/framework/aspectj/LogAspect.java | 2 +- .../ruoyi/framework/notice/fs/FsNotice.java | 20 +++++++++--- .../web/exception/GlobalExceptionHandler.java | 31 ++++++++++--------- 3 files changed, 34 insertions(+), 19 deletions(-) diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/LogAspect.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/LogAspect.java index fdddda1ef..ef6b37174 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/LogAspect.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/LogAspect.java @@ -116,7 +116,7 @@ public class LogAspect // 保存数据库 // AsyncManager.me().execute(AsyncFactory.recordOper(operLog)); // 输出到日志文件 - log.info("接口请求日志:{}", operLog); + log.info("【接口请求日志】{}", operLog); } catch (Exception exp) diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/notice/fs/FsNotice.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/notice/fs/FsNotice.java index 5130b9446..3b74ab492 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/notice/fs/FsNotice.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/notice/fs/FsNotice.java @@ -7,7 +7,6 @@ import cn.hutool.core.util.ArrayUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson2.JSON; import com.ruoyi.common.exception.ServiceException; -import com.ruoyi.common.utils.ip.IpUtils; import com.ruoyi.framework.notice.AbstractNotice; import com.ruoyi.framework.notice.fs.entity.*; import lombok.extern.slf4j.Slf4j; @@ -60,21 +59,34 @@ public class FsNotice extends AbstractNotice { * * @param e */ - public void sendException2MonitorChat(T e) { + public void sendException2MonitorChat(T e){ + sendException2MonitorChat(null,e); + } + + /** + * 发送异常信息给监控群 + * + * @param e + */ + public void sendException2MonitorChat(String uri, T e) { if (Boolean.TRUE.equals(monitorSwitch)) { ThreadUtil.execAsync(() -> { try { //内容 FeiShuMsg.ZhCn zhCn = new FeiShuMsg.ZhCn(); - List> contentFields = new ArrayList<>(4); + List> contentFields = new ArrayList<>(5); contentFields.add(Collections.singletonList(FeiShuTextField .createText(CharSequenceUtil.format("环境:{}", env)))); + if (uri != null) { + contentFields.add(Collections.singletonList(FeiShuTextField + .createText(CharSequenceUtil.format("地址:{}", uri)))); + } contentFields.add(Collections.singletonList(FeiShuTextField .createText(CharSequenceUtil.format("时间:{}", DateUtil.now())))); contentFields.add(Collections.singletonList(FeiShuTextField .createText(CharSequenceUtil.format("异常:{}", e.getClass().getName())))); contentFields.add(Collections.singletonList(FeiShuTextField - .createText(CharSequenceUtil.format("错误信息:{}", StrUtil.truncateUtf8(e.getMessage(),512))))); + .createText(CharSequenceUtil.format("错误信息:{}", StrUtil.truncateUtf8(e.getMessage(), 512))))); zhCn.setContent(contentFields); //消息体 FeiShuMsg feiShuMsg = new FeiShuMsg(); diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/exception/GlobalExceptionHandler.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/exception/GlobalExceptionHandler.java index 4e75f03c1..086a3679e 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/exception/GlobalExceptionHandler.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/exception/GlobalExceptionHandler.java @@ -40,7 +40,7 @@ public class GlobalExceptionHandler { String requestURI = request.getRequestURI(); log.error("请求地址'{}',权限校验失败'{}'", requestURI, e.getMessage()); - sendExceptionMsg(e); + sendExceptionMsg(requestURI, e); return AjaxResult.error(HttpStatus.FORBIDDEN, "没有权限,请联系管理员授权"); } @@ -53,7 +53,7 @@ public class GlobalExceptionHandler { String requestURI = request.getRequestURI(); log.error("请求地址'{}',不支持'{}'请求", requestURI, e.getMethod()); - sendExceptionMsg(e); + sendExceptionMsg(requestURI, e); return AjaxResult.error(e.getMessage()); } @@ -63,8 +63,9 @@ public class GlobalExceptionHandler @ExceptionHandler(ServiceException.class) public AjaxResult handleServiceException(ServiceException e, HttpServletRequest request) { - log.error("请求地址'{}',发生业务异常'{}'", request.getRequestURI(), e.getMessage()); - sendExceptionMsg(e); + String requestURI = request.getRequestURI(); + log.error("请求地址'{}',发生业务异常'{}'", requestURI, e.getMessage()); + sendExceptionMsg(requestURI, e); Integer code = e.getCode(); return StringUtils.isNotNull(code) ? AjaxResult.error(code, e.getMessage()) : AjaxResult.error(e.getMessage()); } @@ -75,8 +76,9 @@ public class GlobalExceptionHandler */ @ExceptionHandler(IllegalArgumentException.class) public AjaxResult illegalArgumentException(IllegalArgumentException e, HttpServletRequest request) { - log.error("请求地址'{}',发生校验异常'{}'", request.getRequestURI(), e.getMessage()); - sendExceptionMsg(e); + String requestURI = request.getRequestURI(); + log.error("请求地址'{}',发生校验异常'{}'", requestURI, e.getMessage()); + sendExceptionMsg(requestURI, e); return AjaxResult.error(e.getMessage()); } @@ -88,7 +90,7 @@ public class GlobalExceptionHandler { String requestURI = request.getRequestURI(); log.error("请求路径中缺少必需的路径变量'{}',发生系统异常.", requestURI, e); - sendExceptionMsg(e); + sendExceptionMsg(requestURI, e); return AjaxResult.error(String.format("请求路径中缺少必需的路径变量[%s]", e.getVariableName())); } @@ -105,7 +107,7 @@ public class GlobalExceptionHandler value = EscapeUtil.clean(value); } log.error("请求参数类型不匹配'{}',发生系统异常.", requestURI, e); - sendExceptionMsg(e); + sendExceptionMsg(requestURI, e); return AjaxResult.error(String.format("请求参数类型不匹配,参数[%s]要求类型为:'%s',但输入值为:'%s'", e.getName(), e.getRequiredType().getName(), value)); } @@ -117,7 +119,7 @@ public class GlobalExceptionHandler { String requestURI = request.getRequestURI(); log.error("请求地址'{}',发生未知异常.", requestURI, e); - sendExceptionMsg(e); + sendExceptionMsg(requestURI, e); return AjaxResult.error(e.getMessage()); } @@ -129,7 +131,7 @@ public class GlobalExceptionHandler { String requestURI = request.getRequestURI(); log.error("请求地址'{}',发生系统异常.", requestURI, e); - sendExceptionMsg(e); + sendExceptionMsg(requestURI, e); return AjaxResult.error(e.getMessage()); } @@ -137,11 +139,11 @@ public class GlobalExceptionHandler * 自定义验证异常 */ @ExceptionHandler(BindException.class) - public AjaxResult handleBindException(BindException e) + public AjaxResult handleBindException(BindException e, HttpServletRequest request) { log.error(e.getMessage(), e); String message = e.getAllErrors().get(0).getDefaultMessage(); - sendExceptionMsg(e); + sendExceptionMsg(request.getRequestURI(), e); return AjaxResult.error(message); } @@ -154,7 +156,7 @@ public class GlobalExceptionHandler String requestURI = request.getRequestURI(); String message = e.getBindingResult().getFieldError().getDefaultMessage(); log.error("请求地址'{}',发生校验异常: {}", requestURI, message); - sendExceptionMsg(e); + sendExceptionMsg(requestURI, e); return AjaxResult.error(message); } @@ -170,10 +172,11 @@ public class GlobalExceptionHandler /** * 发送异常消息 * + * @param uri * @param e * @param */ - private void sendExceptionMsg(T e) { + private void sendExceptionMsg(String uri, T e) { SpringUtils.getBean(FsNotice.class).sendException2MonitorChat(e); } }