钉钉自定义机器人日志报警
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>
钉钉自定义机器人日志报警相关推荐
- 钉钉自定义机器人提示报警信息
获取自定义机器人webhook 步骤一,在机器人管理页面选择"自定义"机器人,输入机器人名字并选择要发送消息的群,同时可以为机器人设置机器人头像. 步骤二,完成必要的安全设置(至少 ...
- 机器人聊天软件c#_使用python3.7配置开发钉钉群自定义机器人(2020年新版攻略)
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_132 最近疫情比较严重,很多公司依靠阿里旗下的办公软件钉钉来进行远程办公,当然了,钉钉这个产品真的是让人一言难尽,要多难用有多难用 ...
- 使用python3.7配置开发钉钉群自定义机器人(2020年新版攻略)
最近疫情比较严重,很多公司依靠阿里旗下的办公软件钉钉来进行远程办公,当然了,钉钉这个产品真的是让人一言难尽,要多难用有多难用,真的让人觉得阿里的pm都是脑残才会设计出这种脑残产品,不过吐槽归吐槽,该用 ...
- 最新教程:Python开发钉钉群自定义机器人
最近疫情比较严重,很多公司依靠阿里旗下的办公软件钉钉来进行远程办公,当然了,钉钉这个产品真的是让人一言难尽,要多难用有多难用,真的让人觉得阿里的pm都是脑残才会设计出这种脑残产品,不过吐槽归吐槽,该用 ...
- 通过Webhook接入钉钉群自定义机器人
在钉钉群中添加Webhook自定义机器人, 复制Webhook地址保存: https://oapi.dingtalk.com/robot/send?access_token=xxxxxx 安全设置:选 ...
- Java实现钉钉自定义机器人接入
Java实现钉钉自定义机器人接入 1. 钉钉自定义机器人接入概述 1.1 钉钉机器人简介 1.2 自定义机器人接入 2. 钉钉自定义机器人接入实现 2.1 场景介绍 2.2 调用频率限制 2.3 创建 ...
- 超火的钉钉自定义机器人原来是这么设置的
企业内部有较多系统支撑着公司的核心业务流程,譬如CRM系统.交易系统.监控报警系统等等.通过钉钉的自定义机器人,可以将这些系统事件同步到钉钉的聊天群 接入自定义机器人很简单,大概以下几步 点击群设置选 ...
- 钉钉自定义机器人python_使用钉钉自定义机器人发送舔狗日记[70行][python]
[Python] 纯文本查看 复制代码# -*- coding: utf-8 -*- import requests import json import time #下面是解密用到的模块 impor ...
- java调用钉钉的群自定义机器人
1.创建钉钉群自定义机器人 2.创建好之后钉钉会返回wobhook地址,这个地址用来访问钉钉接口,如果之前选择了加签,这个地址需要再处理,否则不需要 .(点击设置说明按钮,进入钉钉的官方文档) 3.查 ...
最新文章
- JAVA设计模式(09):结构型-代理模式(Proxy)
- 设计模式:享元模式(Flyweight Pattern)
- 全球及中国工业水性涂料行业销售前景与竞争态势研究报告2022年
- RDL/RDLC批量单据打印 [转]
- PyCharm 中为 Python 项目添加.gitignore文件
- python 检测列表中是否有空值,检查python列表中是否已经存在数字
- 发布一个 Linux 下的 C++ 多线程库
- 麒麟 810 实体芯片亮相;1325 个安卓应用私自搜集数据;Linux Kernel 5.2 发布 | 极客头条...
- python批量安装第三方库_使用Python批量安装第三方库
- 工厂物资管理E-R图
- 联想H61主板BIOS刷新(启天M7100系列)
- 主播被MCN解约并判违约金60万
- codewars 7×7 Skyscrapers 问题解决
- Matlab中常用的清除命令clc,clear,clf等
- Unity3D学习日记6
- 粒子群算法Fortran代码(OMP并行)
- python学习第八天---用Django框架创建可重用注册登录系统
- 《爱乐之城》配色分享
- 一个人在家简单吃点小火锅,搭配点小海鲜
- ArrayList, LinkedList, Vector - dudu:史上最详解
热门文章
- Windows.h和windows.h的区别
- 自定义resttemplate的ErrorHandler
- DialogFragment以及AlertDialogFragment
- 阿里巴巴引入字体图标的第二种方法:
- uniapp 配置 底部 TabBar
- UI 自动化中的分层设计
- Windows删除文件的打开方式
- Winsock 函数
- 口袋里的较量–盘点中国移动互联网“第一次世界大战”
- 【操作系统】LinuxKernel-VFS虚拟文件系统 认知框架构建(super_block,inode,dentry,file)