Skip to content

Navigation Menu

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

钉钉机器人、异常告警钉钉机器人。基于logback 自定义Append ,将收到的日志信息 经过关键字过滤 或者表达式过滤 等级过滤等等 通过钉钉官方机器人API推送到 告警群,限流每分钟不超过 20次。使用异步AsyncAppender,支持配置队列长度、队列阻塞;可以自定义表达式 或者关键字过滤日志。

Notifications You must be signed in to change notification settings

WangJi92/dingtalk-robot-logback-append-spring-boot-start

Repository files navigation

1、解决什么问题

基于钉钉机器人的 logback-append-spring-boot-start,可以通过自定义 logback-append 然后通过钉钉机器人的API 推送到钉钉群,解决线下或者线上 针对错误场景的消息推送,方便开发者快速发现问题解决问题,最终的目的是治理日志,减少异常日志,开发环境快速发现错误。

2、效果图

image image

3、使用

3.1 依赖

3.1.1 外部依赖

<guava-version>30.1.1-jre</guava-version>
<alibaba-dingtalk-service-sdk-version>1.0.1</alibaba-dingtalk-service-sdk-version>
<janino-version>3.1.3</janino-version>

 <!-- 限流使用 -->
<dependency>
  <groupId>com.google.guava</groupId>
  <artifactId>guava</artifactId>
  <version>${guava-version}</version>
  <scope>provided</scope>
</dependency>

 <!-- 钉钉机器人SDK -->
<dependency>
  <groupId>com.aliyun</groupId>
  <artifactId>alibaba-dingtalk-service-sdk</artifactId>
  <version>${alibaba-dingtalk-service-sdk-version}</version>
</dependency>

 <!-- logback 表达式处理 -->
<dependency>
  <groupId>org.codehaus.janino</groupId>
  <artifactId>janino</artifactId>
  <version>${janino-version}</version>
</dependency>

.... logback的一些核心包 引入spring 基本上都有

3.1.2 start 包

<dependency>
      <groupId>com.github.WangJi92</groupId>
      <artifactId>dingtalk-robot-logback-append-spring-boot-start</artifactId>
  </dependency>

3.2 相关配置信息

# 自动配置打开  手动配置logback xml 引入关闭
spring.dingtalk.logback.append.enable=true

# 告警 应用相关配置 【应用名称 、当前环境】
spring.dingtalk.logback.append.application-config.application-name=${spring.application.name}
spring.dingtalk.logback.append.application-config.env=测试环境

## 日志 通知范围配置 【自动配置必须】
spring.dingtalk.logback.append.log-config.append-logger-names[0]=root

## 处理ERROR 日志 【必须配置】
spring.dingtalk.logback.append.log-config.log-level=ERROR

## 关键字过滤 两种方式 1、关键字 2、表达式 http://logback.qos.ch/manual/filters.html#EvaluatorFilter
## 可以都不配置 只处理loglevel 的过滤

# 【自动配置支持关键字和表达式】 【手动配置仅支持表达式】
#spring.dingtalk.logback.append.log-config.include-log-message-key-words[0]=dingding
#spring.dingtalk.logback.append.log-config.include-log-message-key-words[1]=wangji
spring.dingtalk.logback.append.log-config.kew-word-expression=return  formattedMessage.contains("dingding") ||  formattedMessage.contains("wangji");

## 异步队列的配置 【需要注意队列的长度 可能丢日志】
spring.dingtalk.logback.append.log-config.async-appender-queue-size=256
spring.dingtalk.logback.append.log-config.async-appender-never-block=false
spring.dingtalk.logback.append.log-config.async-appender-include-caller-data=true

## 钉钉机器人告警配置 
spring.dingtalk.logback.append.robot-config.robot-title=钉钉日志告警
spring.dingtalk.logback.append.robot-config.webhook=https://oapi.dingtalk.com/robot/send?access_token=34b047c35744144f1433eb02fda6125ef850319e280ea4af6fe6e935ed7847df
spring.dingtalk.logback.append.robot-config.sign-secret=SEC5c6533fc0e86b4f89f4dae5b3d7ee7c42c9d968e360915a21d8c4263ce39c9ca

## 钉钉告警发送速度限制 1分钟20次 guava 限制一下 1/3.5 ~=0.2875
spring.dingtalk.logback.append.robot-config.rate-limiter-permits-per-second=0.2875

# 钉钉通知 快捷链接配置
spring.dingtalk.logback.append.quick-link-config.click-description=点击查看详情

## 链接地址支持配置各种变量[localIp]、[hostname] 等等 https://kaifa.baidu.com/searchPage?w=[localIp]
## 发现问题一键进入服务器、k8s集群的链接地址
## localIp 为logback 中定义的属性 目前已经有了 hostname、localIp、app 等等关键字
## 发现问题一键进入服务器、k8s集群的链接地址
spring.dingtalk.logback.append.quick-link-config.click-url=https://kaifa.baidu.com/searchPage?w=[localIp]

3.3 自动装配

自动装配模式 不需要配置logback的xml通过编程的方式植入钉钉append。 如下为自动配置特有属性

# 自动配置打开  手动配置logback xml 引入关闭
spring.dingtalk.logback.append.enable=true
## 日志 通知范围配置 【自动配置必须】
spring.dingtalk.logback.append.log-config.append-logger-names[0]=root

## 关键字过滤 两种方式 1、关键字 2、表达式 http://logback.qos.ch/manual/filters.html#EvaluatorFilter
## 可以都不配置 只处理loglevel 的过滤
# 【自动配置支持关键字和表达式】 【手动配置仅支持表达式】
#spring.dingtalk.logback.append.log-config.log-key-words[0]=dingding
#spring.dingtalk.logback.append.log-config.log-key-words[1]=wangji
spring.dingtalk.logback.append.log-config.kew-word-expression=return  formattedMessage.contains("dingding") ||  formattedMessage.contains("wangji");

如何理解 append-logger-names 就是将钉钉日志 添加到具体的哪个logger 中去

private void addLoggerNameDingTalkRobotAppender(AsyncAppender asyncAppender) {
       DingTalkRobotAppendProperties.LogConfig logConfig = dingTalkRobotAppendProperties.getLogConfig();
       for (String loggerName : logConfig.getAppendLoggerNames()) {
           Logger logger = loggerContext.getLogger(loggerName);
           if (logger == null) {
               log.warn("dingtalk alarm logger name ={} not found", loggerName);
               continue;
           }
           logger.addAppender(asyncAppender);
       }
   }

3.3 手动配置xml

这个是基础配置的属性logback 中使用, spring 扩展logback 提供的 springProperty 标签注入logback 属性 先引入基础 然后引入具体的 layout ,可以在中间 修改基础引入的属性 比如 DINGTALK_ROBOT_LOG_PATTERN 这个属性 修改一下 ch.qos.logback.classic.encoder.PatternLayoutEncoder 中使用的日志的模板,使用 CBT_CONVERT_DINGTALK_ROBOT_LOG_PATTERN 进行替换。

 <springProperty scope="context" name="dingTalkRobotSignSecret"
                    source="spring.dingtalk.logback.append.robot-config.sign-secret" defaultValue=""/>

3.3.1 pattern layout 定义的格式

com/github/wangji92/dingtalkrobot/logback-dingtalk-robot-pattern-layout.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="true">
    <!--    spring 默认的-->
    <include resource="org/springframework/boot/logging/logback/defaults.xml"/>
    <include resource="com/github/wangji92/dingtalkrobot/logback-dingtalk-robot-base.xml"/>

    <!--    layout 的格式 替换默认的 这里使用 spring.dingtalk.logback.append.quick-link-config.click-url=https://kaifa.baidu.com/searchPage?w=[localIp] 动态的配置 可以跟进需求 修改为hostname、app 等等变量-->
    <property name="DINGTALK_ROBOT_LOG_PATTERN" value="${CBT_CONVERT_DINGTALK_ROBOT_LOG_PATTERN}"/>
    <!--    替换掉默认的DINGTALK_ROBOT_LOG_PATTERN,没有打印 链接详情的那个-->

    <!--    钉钉机器人告警处理 使用pattern layout -->
    <include resource="com/github/wangji92/dingtalkrobot/logback-dingtalk-robot-pattern-layout.xml"/>


    <!-- ConsoleAppender 控制台输出日志 -->
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
        </encoder>
    </appender>

    <root>
        <level value="info"/>
        <!-- 控制台输出 -->
        <appender-ref ref="console"/>
        <!--        钉钉告警处理输出-->
        <appender-ref ref="asyncDingtalkPatternLayoutEncoderAppend"/>
    </root>
</configuration>

3.3.2 手动编程定义的格式 [学习自己玩一下]

com/github/wangji92/dingtalkrobot/logback-dingtalk-robot-custom-layout.xml

com.github.wangji92.dingtalkrobot.logback.layout.DingTalkRobotLayout

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="true">
    <!--    spring 默认的-->
    <include resource="org/springframework/boot/logging/logback/defaults.xml"/>

    <include resource="com/github/wangji92/dingtalkrobot/logback-dingtalk-robot-base.xml"/>

    <!--    钉钉机器人告警处理 使用自定义的layout 可以了解一下 如何处理的 推荐使用 pattern-layout 更加灵活-->
    <include resource="com/github/wangji92/dingtalkrobot/logback-dingtalk-robot-custom-layout.xml"/>

    <!--    这里覆盖spring 定义的变量-->
    <property name="CONSOLE_LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger - %msg%n"/>

    <!-- ConsoleAppender 控制台输出日志 -->
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
        </encoder>
    </appender>

    <root>
        <level value="info"/>
        <!-- 控制台输出 -->
        <appender-ref ref="console"/>
        <!--        钉钉告警处理输出-->
        <appender-ref ref="asyncDingTalkCustomLayoutAppend"/>
    </root>
</configuration>

4、logback 的一些 学习

logback append 开发过程中了解的总结

About

钉钉机器人、异常告警钉钉机器人。基于logback 自定义Append ,将收到的日志信息 经过关键字过滤 或者表达式过滤 等级过滤等等 通过钉钉官方机器人API推送到 告警群,限流每分钟不超过 20次。使用异步AsyncAppender,支持配置队列长度、队列阻塞;可以自定义表达式 或者关键字过滤日志。

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

Morty Proxy This is a proxified and sanitized view of the page, visit original site.