当前位置: 首页 > ai >正文

Spring Boot配置error日志发送至企业微信

1.创建 WeComAppender ,重写 AppenderBase 的 append 方法

import ch.qos.logback.classic.spi.ILoggingEvent;
import ch.qos.logback.core.AppenderBase;
import cn.hutool.core.thread.ThreadUtil;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.time.ZoneOffset;public class WeComAppender extends AppenderBase<ILoggingEvent> {@Overrideprotected void append(ILoggingEvent event) {try {// 按项目需求自定义拼装消息串,此处仅供参考StringBuilder sb = new StringBuilder();sb.append(event.getInstant().atOffset(ZoneOffset.ofHours(8)));sb.append(event);if (event.getThrowableProxy() != null) {sb.append(" ");sb.append(event.getThrowableProxy().getMessage());}// 异步请求,避免影响主线程ThreadUtil.execAsync(() -> sendHttpRequest(sb.toString()));} catch (Exception e) {}}/*** 发送请求* @param message*/public void sendHttpRequest(String message) {try {// 机器人 webhook 地址String webhookUrl = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxxxxxxxxxxxxxxxxxxxxxxxxx";URL url = new URL(webhookUrl);HttpURLConnection connection = (HttpURLConnection) url.openConnection();connection.setRequestMethod("POST");connection.setRequestProperty("Content-Type", "application/json; utf-8");connection.setRequestProperty("Accept", "application/json");connection.setDoOutput(true);// 企微机器人固定的请求结构,详情请参考企微文档(钉钉的请参考钉钉文档)String jsonInputString = "{\"msgtype\": \"text\", \"text\": {\"content\": \"\"}}";JSONObject jsonObject = JSON.parseObject(jsonInputString);jsonObject.getJSONObject("text").put("content", message);try (OutputStream os = connection.getOutputStream()) {byte[] input = jsonObject.toString().getBytes(StandardCharsets.UTF_8);os.write(input, 0, input.length);}int responseCode = connection.getResponseCode();} catch (Exception e) {}}
}

2.配置 logback.xml


<?xml version="1.0" encoding="UTF-8"?>
<configuration><!-- WECOM:企微告警 --><!-- class 设置为 WeComAppender --><appender name="WECOM" class="com.hi.framework.logback.WeComLogbackAppender"><filter class="ch.qos.logback.classic.filter.ThresholdFilter"><!-- 日志等级为 ERROR --><level>ERROR</level></filter><encoder><pattern>%d{yyyy-MM-dd HH:mm:ss} %level [%thread] %logger{36} %msg%n</pattern></encoder></appender><root level="INFO"><appender-ref ref="WECOM" /></root></configuration>
http://www.xdnf.cn/news/19705.html

相关文章:

  • char、short、int等整型类型取值范围
  • Java继承
  • 【YOLO】数据增强bug
  • mysql第五天学习 Mysql全局优化总结
  • AI+教育:用BERT构建个性化错题推荐系统
  • 多线程同步安全机制
  • 进程管理和IPC
  • 嵌入式|RTOS教学——FreeRTOS基础1:准备工作
  • 解锁产品说明书的“视觉密码”:多模态 RAG 与 GPT-4 的深度融合 (AI应用与技术系列)
  • 深度学习与 OpenCV 的深度羁绊:从技术协同到代码实践
  • k8s知识点总结3
  • 数据结构_循环队列_牺牲一个存储空间_不牺牲额外的存储空间 Circular Queue(C语言实现_超详细)
  • 【Linux】Linux开发必备:Git版本控制与GDB调试全指南
  • 物联网时序数据存储方案:Apache IoTDB 集群部署全流程 + TimechoDB 优势解读
  • 代码质量保障:使用Jest和React Testing Library进行单元测试
  • 服务器固件全景地图:从BIOS到BMC,升级背后的安全与性能革命
  • 日志分析与安全数据上传脚本
  • 飞算JavaAI真能帮小白搞定在线图书借阅系统?开发效果大揭秘!
  • PgManage:一款免费开源、跨平台的数据库管理工具
  • 什么是 Java 的反射机制?它有什么优缺点?
  • 普通大学生的 Web3 实习怎么找?行业指南与实践技巧这里看
  • Redis 哨兵 (基于 Docker)
  • 梯度波导_FDTD_学习_代码
  • 嵌入式 - 硬件:51单片机
  • 实训云上搭建分布式Hadoop集群[2025] 实战笔记
  • 【llama.cpp】qwen2_vl_surgery.py详解
  • Web 开发 17
  • C++中的“平凡”之美:std::unique_ptr源码探秘
  • 【SpringBootWeb开发】《一篇带你入门Web后端开发》
  • 【数学建模学习笔记】样本均衡