1、引入钉钉的maven 依赖

 <dependency><groupId>com.aliyun</groupId><artifactId>alibaba-dingtalk-service-sdk</artifactId><version>1.0.1</version><exclusions><exclusion><groupId>log4j</groupId><artifactId>log4j</artifactId></exclusion></exclusions></dependency>

2、自定义appender

public class DingTalkAppender extends AppenderBase<LoggingEvent> {PatternLayoutEncoder encoder;//多级自定义配置,需Getter和Setter方法DingTalkLogbackParam dingTalkLogbackParam;@Overridepublic void start() {//可以做一些初始化相关资源的操作,如数据库连接,redis线程池等等if (this.encoder == null) {//name : logback.xml 中 appender 标签 配置的name值addError("No encoder set for the appender named [" + name + "].");return;}super.start();}@Overridepublic void stop() {//可以做一些释放相关资源的操作,如数据库连接,redis线程池等等System.out.println("stop方法被调用");if (!isStarted()) {return;}super.stop();}@Overrideprotected void append(LoggingEvent eventObject) {/*** 指定只有 error 级别的日志,才发消息* 后续可以根据配置指定,此处暂不实现*/if (dingTalkLogbackParam == null) {return;}boolean sendMsg = dingTalkLogbackParam.isSendMsg();if (!sendMsg) {addInfo("不输出日志===================");return;}Level level = eventObject.getLevel();if (Level.ERROR.levelInt == level.levelInt) {String accessToken = dingTalkLogbackParam.getWebHookAccessToken();if (StringUtils.isEmpty(accessToken)) {System.out.println("没有匹配的name和token");addError("No dingTalk accessToken for the appender named [" + name + "].");return;}String message = eventObject.getMessage();if (StringUtils.isNotEmpty(dingTalkLogbackParam.getMarkMsg())) {message = dingTalkLogbackParam.getMarkMsg().concat("---").concat(message);}// 发钉钉报警消息DingTalkSenMsgService.sendTextMsg(message,accessToken);}}public PatternLayoutEncoder getEncoder() {return encoder;}public void setEncoder(PatternLayoutEncoder encoder) {this.encoder = encoder;}public DingTalkLogbackParam getDingTalkLogbackParam() {return dingTalkLogbackParam;}public void setDingTalkLogbackParam(DingTalkLogbackParam dingTalkLogbackParam) {this.dingTalkLogbackParam = dingTalkLogbackParam;}}

3、自定义appender的属性参数对象,用于在logback.xml 中 设置自定义的属性

public class DingTalkLogbackParam {/*** 是否要发钉钉消息*/private boolean sendMsg = false;/*** robot token*/private String webHookAccessToken;/*** 关键词标识,若配置 消息以 【markMsg】 开始,同时匹配钉钉的关键词策略*/private String markMsg;public boolean isSendMsg() {return sendMsg;}public void setSendMsg(boolean sendMsg) {this.sendMsg = sendMsg;}public String getWebHookAccessToken() {return webHookAccessToken;}public void setWebHookAccessToken(String webHookAccessToken) {this.webHookAccessToken = webHookAccessToken;}public String getMarkMsg() {return markMsg;}public void setMarkMsg(String markMsg) {this.markMsg = markMsg;}
}

4、发消息工具类

public class DingTalkSenMsgService {private static final String dingTalkWebHookDomain = "https://oapi.dingtalk.com/robot/send?access_token=";/*** 发送json串消息*/public static boolean sendTextMsg(String content, String accessToken) {return sendTextMsg(content, accessToken, null);}public static boolean sendTextMsg(String content, String accessToken, String keyWords) {Assert.notNull(content, "消息内容不能为空");Assert.notNull(accessToken, "accessToken不能为空");if (StringUtils.isNotEmpty(keyWords)) {content = keyWords.concat(content);}try {OapiRobotSendRequest.Text text = new OapiRobotSendRequest.Text();text.setContent(content);String tokenURL = dingTalkWebHookDomain.concat(accessToken);DingTalkClient client = new DefaultDingTalkClient(tokenURL);OapiRobotSendRequest request = new OapiRobotSendRequest();request.setMsgtype("text");request.setText(text);OapiRobotSendResponse response = client.execute(request);//System.out.println(JSONObject.toJSONString(response));} catch (Exception e) {}return true;}
}

5、配置logback.xml

<!-- 通过配置文件的方式引入自定义appender的相关配置信息 -->
<springProperty name="ding.talk.webhook.send.msg" source="ding.talk.webhook.send.msg"/><springProperty name="ding.talk.webhook.mark.msg" source="ding.talk.webhook.mark.msg"/><springProperty name="ding.talk.webhook.access.token" source="ding.talk.webhook.access.token"/><!-- 控制台输出 --><appender name="dingTalkAppenderSync"class="cn.xx.common.logback.DingTalkAppender"><filter class="ch.qos.logback.classic.filter.ThresholdFilter"><!-- 日志收集最低日志级别 --><level>ERROR</level></filter><encoder><!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 --><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern></encoder><!-- 自定义参数 --><dingTalkLogbackParam><sendMsg>${ding.talk.webhook.send.msg}</sendMsg><markMsg>${ding.talk.webhook.mark.msg}</markMsg><webHookAccessToken>${ding.talk.webhook.access.token}</webHookAccessToken></dingTalkLogbackParam></appender><!-- 发消息异步输出 --><appender name ="dingTalkAppenderAsync" class= "ch.qos.logback.classic.AsyncAppender"><!-- 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 --><discardingThreshold >0</discardingThreshold><!-- 更改默认的队列的深度,该值会影响性能.默认值为256 --><queueSize>512</queueSize><!-- 添加附加的appender,最多只能添加一个 --><appender-ref ref ="dingTalkAppenderSync"/></appender><root level="INFO"><appender-ref ref="CONSOLE"/><appender-ref ref="dingTalkAppenderAsync"/></root>

钉钉自定义机器人日志报警相关推荐

  1. 钉钉自定义机器人提示报警信息

    获取自定义机器人webhook 步骤一,在机器人管理页面选择"自定义"机器人,输入机器人名字并选择要发送消息的群,同时可以为机器人设置机器人头像. 步骤二,完成必要的安全设置(至少 ...

  2. 机器人聊天软件c#_使用python3.7配置开发钉钉群自定义机器人(2020年新版攻略)

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_132 最近疫情比较严重,很多公司依靠阿里旗下的办公软件钉钉来进行远程办公,当然了,钉钉这个产品真的是让人一言难尽,要多难用有多难用 ...

  3. 使用python3.7配置开发钉钉群自定义机器人(2020年新版攻略)

    最近疫情比较严重,很多公司依靠阿里旗下的办公软件钉钉来进行远程办公,当然了,钉钉这个产品真的是让人一言难尽,要多难用有多难用,真的让人觉得阿里的pm都是脑残才会设计出这种脑残产品,不过吐槽归吐槽,该用 ...

  4. 最新教程:Python开发钉钉群自定义机器人

    最近疫情比较严重,很多公司依靠阿里旗下的办公软件钉钉来进行远程办公,当然了,钉钉这个产品真的是让人一言难尽,要多难用有多难用,真的让人觉得阿里的pm都是脑残才会设计出这种脑残产品,不过吐槽归吐槽,该用 ...

  5. 通过Webhook接入钉钉群自定义机器人

    在钉钉群中添加Webhook自定义机器人, 复制Webhook地址保存: https://oapi.dingtalk.com/robot/send?access_token=xxxxxx 安全设置:选 ...

  6. Java实现钉钉自定义机器人接入

    Java实现钉钉自定义机器人接入 1. 钉钉自定义机器人接入概述 1.1 钉钉机器人简介 1.2 自定义机器人接入 2. 钉钉自定义机器人接入实现 2.1 场景介绍 2.2 调用频率限制 2.3 创建 ...

  7. 超火的钉钉自定义机器人原来是这么设置的

    企业内部有较多系统支撑着公司的核心业务流程,譬如CRM系统.交易系统.监控报警系统等等.通过钉钉的自定义机器人,可以将这些系统事件同步到钉钉的聊天群 接入自定义机器人很简单,大概以下几步 点击群设置选 ...

  8. 钉钉自定义机器人python_使用钉钉自定义机器人发送舔狗日记[70行][python]

    [Python] 纯文本查看 复制代码# -*- coding: utf-8 -*- import requests import json import time #下面是解密用到的模块 impor ...

  9. java调用钉钉的群自定义机器人

    1.创建钉钉群自定义机器人 2.创建好之后钉钉会返回wobhook地址,这个地址用来访问钉钉接口,如果之前选择了加签,这个地址需要再处理,否则不需要 .(点击设置说明按钮,进入钉钉的官方文档) 3.查 ...

最新文章

  1. JAVA设计模式(09):结构型-代理模式(Proxy)
  2. 设计模式:享元模式(Flyweight Pattern)
  3. 全球及中国工业水性涂料行业销售前景与竞争态势研究报告2022年
  4. RDL/RDLC批量单据打印 [转]
  5. PyCharm 中为 Python 项目添加.gitignore文件
  6. python 检测列表中是否有空值,检查python列表中是否已经存在数字
  7. 发布一个 Linux 下的 C++ 多线程库
  8. 麒麟 810 实体芯片亮相;1325 个安卓应用私自搜集数据;Linux Kernel 5.2 发布 | 极客头条...
  9. python批量安装第三方库_使用Python批量安装第三方库
  10. 工厂物资管理E-R图
  11. 联想H61主板BIOS刷新(启天M7100系列)
  12. 主播被MCN解约并判违约金60万
  13. codewars 7×7 Skyscrapers 问题解决
  14. Matlab中常用的清除命令clc,clear,clf等
  15. Unity3D学习日记6
  16. 粒子群算法Fortran代码(OMP并行)
  17. python学习第八天---用Django框架创建可重用注册登录系统
  18. 《爱乐之城》配色分享
  19. 一个人在家简单吃点小火锅,搭配点小海鲜
  20. ArrayList, LinkedList, Vector - dudu:史上最详解

热门文章

  1. Windows.h和windows.h的区别
  2. 自定义resttemplate的ErrorHandler
  3. DialogFragment以及AlertDialogFragment
  4. 阿里巴巴引入字体图标的第二种方法:
  5. uniapp 配置 底部 TabBar
  6. UI 自动化中的分层设计
  7. Windows删除文件的打开方式
  8. Winsock 函数
  9. 口袋里的较量–盘点中国移动互联网“第一次世界大战”
  10. 【操作系统】LinuxKernel-VFS虚拟文件系统 认知框架构建(super_block,inode,dentry,file)