{"id":16178828,"url":"https://github.com/wangji92/dingtalk-robot-logback-append-spring-boot-start","last_synced_at":"2025-03-19T01:30:51.650Z","repository":{"id":51234935,"uuid":"359078546","full_name":"WangJi92/dingtalk-robot-logback-append-spring-boot-start","owner":"WangJi92","description":"钉钉机器人、异常告警钉钉机器人。基于logback 自定义Append ,将收到的日志信息 经过关键字过滤 或者表达式过滤 等级过滤等等 通过钉钉官方机器人API推送到 告警群，限流每分钟不超过 20次。使用异步AsyncAppender，支持配置队列长度、队列阻塞；可以自定义表达式 或者关键字过滤日志。","archived":false,"fork":false,"pushed_at":"2021-05-19T15:12:44.000Z","size":196,"stargazers_count":13,"open_issues_count":0,"forks_count":4,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-17T01:35:11.321Z","etag":null,"topics":["dingtalk-robot","logback","logback-appender","spring-boot-starter"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/WangJi92.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2021-04-18T07:47:26.000Z","updated_at":"2024-10-18T11:10:10.000Z","dependencies_parsed_at":"2022-08-29T20:41:20.236Z","dependency_job_id":null,"html_url":"https://github.com/WangJi92/dingtalk-robot-logback-append-spring-boot-start","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/WangJi92%2Fdingtalk-robot-logback-append-spring-boot-start","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/WangJi92%2Fdingtalk-robot-logback-append-spring-boot-start/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/WangJi92%2Fdingtalk-robot-logback-append-spring-boot-start/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/WangJi92%2Fdingtalk-robot-logback-append-spring-boot-start/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/WangJi92","download_url":"https://codeload.github.com/WangJi92/dingtalk-robot-logback-append-spring-boot-start/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244336123,"owners_count":20436772,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dingtalk-robot","logback","logback-appender","spring-boot-starter"],"created_at":"2024-10-10T05:24:38.893Z","updated_at":"2025-03-19T01:30:51.357Z","avatar_url":"https://github.com/WangJi92.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"## 1、解决什么问题\n基于钉钉机器人的 logback-append-spring-boot-start，可以通过自定义 logback-append 然后通过钉钉机器人的API 推送到钉钉群，解决线下或者线上 针对错误场景的消息推送,方便开发者快速发现问题解决问题，最终的目的是治理日志，减少异常日志，开发环境快速发现错误。\n## 2、效果图\n![image](https://user-images.githubusercontent.com/20874972/115430659-24d87a80-a237-11eb-9e03-7910abf11e42.png)\n![image](https://user-images.githubusercontent.com/20874972/115430762-3a4da480-a237-11eb-8a7f-12611c2a957a.png)\n\n## 3、使用\n### 3.1 依赖 \n#### 3.1.1 外部依赖\n```xml\n\u003cguava-version\u003e30.1.1-jre\u003c/guava-version\u003e\n\u003calibaba-dingtalk-service-sdk-version\u003e1.0.1\u003c/alibaba-dingtalk-service-sdk-version\u003e\n\u003cjanino-version\u003e3.1.3\u003c/janino-version\u003e\n\n \u003c!-- 限流使用 --\u003e\n\u003cdependency\u003e\n  \u003cgroupId\u003ecom.google.guava\u003c/groupId\u003e\n  \u003cartifactId\u003eguava\u003c/artifactId\u003e\n  \u003cversion\u003e${guava-version}\u003c/version\u003e\n  \u003cscope\u003eprovided\u003c/scope\u003e\n\u003c/dependency\u003e\n\n \u003c!-- 钉钉机器人SDK --\u003e\n\u003cdependency\u003e\n  \u003cgroupId\u003ecom.aliyun\u003c/groupId\u003e\n  \u003cartifactId\u003ealibaba-dingtalk-service-sdk\u003c/artifactId\u003e\n  \u003cversion\u003e${alibaba-dingtalk-service-sdk-version}\u003c/version\u003e\n\u003c/dependency\u003e\n\n \u003c!-- logback 表达式处理 --\u003e\n\u003cdependency\u003e\n  \u003cgroupId\u003eorg.codehaus.janino\u003c/groupId\u003e\n  \u003cartifactId\u003ejanino\u003c/artifactId\u003e\n  \u003cversion\u003e${janino-version}\u003c/version\u003e\n\u003c/dependency\u003e\n\n.... logback的一些核心包 引入spring 基本上都有\n```\n#### 3.1.2 start 包\n```xml\n\u003cdependency\u003e\n      \u003cgroupId\u003ecom.github.WangJi92\u003c/groupId\u003e\n      \u003cartifactId\u003edingtalk-robot-logback-append-spring-boot-start\u003c/artifactId\u003e\n  \u003c/dependency\u003e\n```\n### 3.2  相关配置信息 \n```properties\n# 自动配置打开  手动配置logback xml 引入关闭\nspring.dingtalk.logback.append.enable=true\n\n# 告警 应用相关配置 【应用名称 、当前环境】\nspring.dingtalk.logback.append.application-config.application-name=${spring.application.name}\nspring.dingtalk.logback.append.application-config.env=测试环境\n\n## 日志 通知范围配置 【自动配置必须】\nspring.dingtalk.logback.append.log-config.append-logger-names[0]=root\n\n## 处理ERROR 日志 【必须配置】\nspring.dingtalk.logback.append.log-config.log-level=ERROR\n\n## 关键字过滤 两种方式 1、关键字 2、表达式 http://logback.qos.ch/manual/filters.html#EvaluatorFilter\n## 可以都不配置 只处理loglevel 的过滤\n\n# 【自动配置支持关键字和表达式】 【手动配置仅支持表达式】\n#spring.dingtalk.logback.append.log-config.include-log-message-key-words[0]=dingding\n#spring.dingtalk.logback.append.log-config.include-log-message-key-words[1]=wangji\nspring.dingtalk.logback.append.log-config.kew-word-expression=return  formattedMessage.contains(\"dingding\") ||  formattedMessage.contains(\"wangji\");\n\n## 异步队列的配置 【需要注意队列的长度 可能丢日志】\nspring.dingtalk.logback.append.log-config.async-appender-queue-size=256\nspring.dingtalk.logback.append.log-config.async-appender-never-block=false\nspring.dingtalk.logback.append.log-config.async-appender-include-caller-data=true\n\n## 钉钉机器人告警配置 \nspring.dingtalk.logback.append.robot-config.robot-title=钉钉日志告警\nspring.dingtalk.logback.append.robot-config.webhook=https://oapi.dingtalk.com/robot/send?access_token=34b047c35744144f1433eb02fda6125ef850319e280ea4af6fe6e935ed7847df\nspring.dingtalk.logback.append.robot-config.sign-secret=SEC5c6533fc0e86b4f89f4dae5b3d7ee7c42c9d968e360915a21d8c4263ce39c9ca\n\n## 钉钉告警发送速度限制 1分钟20次 guava 限制一下 1/3.5 ~=0.2875\nspring.dingtalk.logback.append.robot-config.rate-limiter-permits-per-second=0.2875\n\n# 钉钉通知 快捷链接配置\nspring.dingtalk.logback.append.quick-link-config.click-description=点击查看详情\n\n## 链接地址支持配置各种变量[localIp]、[hostname] 等等 https://kaifa.baidu.com/searchPage?w=[localIp]\n## 发现问题一键进入服务器、k8s集群的链接地址\n## localIp 为logback 中定义的属性 目前已经有了 hostname、localIp、app 等等关键字\n## 发现问题一键进入服务器、k8s集群的链接地址\nspring.dingtalk.logback.append.quick-link-config.click-url=https://kaifa.baidu.com/searchPage?w=[localIp]\n\n```\n\n### 3.3 自动装配\n自动装配模式 不需要配置logback的xml通过编程的方式植入钉钉append。\n如下为自动配置特有属性\n\n```properties\n# 自动配置打开  手动配置logback xml 引入关闭\nspring.dingtalk.logback.append.enable=true\n## 日志 通知范围配置 【自动配置必须】\nspring.dingtalk.logback.append.log-config.append-logger-names[0]=root\n\n## 关键字过滤 两种方式 1、关键字 2、表达式 http://logback.qos.ch/manual/filters.html#EvaluatorFilter\n## 可以都不配置 只处理loglevel 的过滤\n# 【自动配置支持关键字和表达式】 【手动配置仅支持表达式】\n#spring.dingtalk.logback.append.log-config.log-key-words[0]=dingding\n#spring.dingtalk.logback.append.log-config.log-key-words[1]=wangji\nspring.dingtalk.logback.append.log-config.kew-word-expression=return  formattedMessage.contains(\"dingding\") ||  formattedMessage.contains(\"wangji\");\n\n```\n如何理解 append-logger-names 就是将钉钉日志 添加到具体的哪个logger 中去\n```java\nprivate void addLoggerNameDingTalkRobotAppender(AsyncAppender asyncAppender) {\n       DingTalkRobotAppendProperties.LogConfig logConfig = dingTalkRobotAppendProperties.getLogConfig();\n       for (String loggerName : logConfig.getAppendLoggerNames()) {\n           Logger logger = loggerContext.getLogger(loggerName);\n           if (logger == null) {\n               log.warn(\"dingtalk alarm logger name ={} not found\", loggerName);\n               continue;\n           }\n           logger.addAppender(asyncAppender);\n       }\n   }\n```\n\n\n### 3.3 手动配置xml\n* [com/github/wangji92/dingtalkrobot/logback-dingtalk-robot-base.xml](https://github.com/WangJi92/dingtalk-robot-logback-append-spring-boot-start/blob/master/src/main/resources/com/github/wangji92/dingtalkrobot/logback-dingtalk-robot-base.xml)\n\n这个是基础配置的属性logback 中使用, spring 扩展logback 提供的 springProperty 标签注入logback 属性\n先引入基础 然后引入具体的 layout ，可以在中间 修改基础引入的属性 比如 DINGTALK_ROBOT_LOG_PATTERN 这个属性 修改一下 ch.qos.logback.classic.encoder.PatternLayoutEncoder\n中使用的日志的模板，使用 CBT_CONVERT_DINGTALK_ROBOT_LOG_PATTERN 进行替换。\n\n* [spring profile-specific-configuration](https://docs.spring.io/spring-boot/docs/current/reference/html/spring-boot-features.html#profile-specific-configuration)\n* [org/springframework/boot/logging/logback/defaults.xml](https://github.com/spring-projects/spring-boot/blob/v2.4.5/spring-boot-project/spring-boot/src/main/resources/org/springframework/boot/logging/logback/defaults.xml)\n\n\n```xml\n \u003cspringProperty scope=\"context\" name=\"dingTalkRobotSignSecret\"\n                    source=\"spring.dingtalk.logback.append.robot-config.sign-secret\" defaultValue=\"\"/\u003e\n```\n\n#### 3.3.1  pattern layout 定义的格式\n[com/github/wangji92/dingtalkrobot/logback-dingtalk-robot-pattern-layout.xml](https://github.com/WangJi92/dingtalk-robot-logback-append-spring-boot-start/blob/master/src/main/resources/com/github/wangji92/dingtalkrobot/logback-dingtalk-robot-pattern-layout.xml)\n```xml\n\u003c?xml version=\"1.0\" encoding=\"UTF-8\"?\u003e\n\u003cconfiguration scan=\"true\" scanPeriod=\"60 seconds\" debug=\"true\"\u003e\n    \u003c!--    spring 默认的--\u003e\n    \u003cinclude resource=\"org/springframework/boot/logging/logback/defaults.xml\"/\u003e\n    \u003cinclude resource=\"com/github/wangji92/dingtalkrobot/logback-dingtalk-robot-base.xml\"/\u003e\n\n    \u003c!--    layout 的格式 替换默认的 这里使用 spring.dingtalk.logback.append.quick-link-config.click-url=https://kaifa.baidu.com/searchPage?w=[localIp] 动态的配置 可以跟进需求 修改为hostname、app 等等变量--\u003e\n    \u003cproperty name=\"DINGTALK_ROBOT_LOG_PATTERN\" value=\"${CBT_CONVERT_DINGTALK_ROBOT_LOG_PATTERN}\"/\u003e\n    \u003c!--    替换掉默认的DINGTALK_ROBOT_LOG_PATTERN，没有打印 链接详情的那个--\u003e\n\n    \u003c!--    钉钉机器人告警处理 使用pattern layout --\u003e\n    \u003cinclude resource=\"com/github/wangji92/dingtalkrobot/logback-dingtalk-robot-pattern-layout.xml\"/\u003e\n\n\n    \u003c!-- ConsoleAppender 控制台输出日志 --\u003e\n    \u003cappender name=\"console\" class=\"ch.qos.logback.core.ConsoleAppender\"\u003e\n        \u003cencoder class=\"ch.qos.logback.classic.encoder.PatternLayoutEncoder\"\u003e\n            \u003cpattern\u003e${CONSOLE_LOG_PATTERN}\u003c/pattern\u003e\n        \u003c/encoder\u003e\n    \u003c/appender\u003e\n\n    \u003croot\u003e\n        \u003clevel value=\"info\"/\u003e\n        \u003c!-- 控制台输出 --\u003e\n        \u003cappender-ref ref=\"console\"/\u003e\n        \u003c!--        钉钉告警处理输出--\u003e\n        \u003cappender-ref ref=\"asyncDingtalkPatternLayoutEncoderAppend\"/\u003e\n    \u003c/root\u003e\n\u003c/configuration\u003e\n```\n#### 3.3.2  手动编程定义的格式 [学习自己玩一下]\n\n[com/github/wangji92/dingtalkrobot/logback-dingtalk-robot-custom-layout.xml](https://github.com/WangJi92/dingtalk-robot-logback-append-spring-boot-start/blob/master/src/main/resources/com/github/wangji92/dingtalkrobot/logback-dingtalk-robot-custom-layout.xml)\n\ncom.github.wangji92.dingtalkrobot.logback.layout.DingTalkRobotLayout\n```xml\n\u003c?xml version=\"1.0\" encoding=\"UTF-8\"?\u003e\n\u003cconfiguration scan=\"true\" scanPeriod=\"60 seconds\" debug=\"true\"\u003e\n    \u003c!--    spring 默认的--\u003e\n    \u003cinclude resource=\"org/springframework/boot/logging/logback/defaults.xml\"/\u003e\n\n    \u003cinclude resource=\"com/github/wangji92/dingtalkrobot/logback-dingtalk-robot-base.xml\"/\u003e\n\n    \u003c!--    钉钉机器人告警处理 使用自定义的layout 可以了解一下 如何处理的 推荐使用 pattern-layout 更加灵活--\u003e\n    \u003cinclude resource=\"com/github/wangji92/dingtalkrobot/logback-dingtalk-robot-custom-layout.xml\"/\u003e\n\n    \u003c!--    这里覆盖spring 定义的变量--\u003e\n    \u003cproperty name=\"CONSOLE_LOG_PATTERN\" value=\"%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger - %msg%n\"/\u003e\n\n    \u003c!-- ConsoleAppender 控制台输出日志 --\u003e\n    \u003cappender name=\"console\" class=\"ch.qos.logback.core.ConsoleAppender\"\u003e\n        \u003cencoder class=\"ch.qos.logback.classic.encoder.PatternLayoutEncoder\"\u003e\n            \u003cpattern\u003e${CONSOLE_LOG_PATTERN}\u003c/pattern\u003e\n        \u003c/encoder\u003e\n    \u003c/appender\u003e\n\n    \u003croot\u003e\n        \u003clevel value=\"info\"/\u003e\n        \u003c!-- 控制台输出 --\u003e\n        \u003cappender-ref ref=\"console\"/\u003e\n        \u003c!--        钉钉告警处理输出--\u003e\n        \u003cappender-ref ref=\"asyncDingTalkCustomLayoutAppend\"/\u003e\n    \u003c/root\u003e\n\u003c/configuration\u003e\n```\n### 4、logback 的一些 学习\n\n[logback append 开发过程中了解的总结](LOGBACK_README.md)\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwangji92%2Fdingtalk-robot-logback-append-spring-boot-start","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwangji92%2Fdingtalk-robot-logback-append-spring-boot-start","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwangji92%2Fdingtalk-robot-logback-append-spring-boot-start/lists"}