V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
simonlu9
V2EX  ›  推广

springboot 日志报错告警插件,快速定位线上错误

  •  
  •   simonlu9 · 7 天前 · 402 次点击

    log-alarm-springboot-starter

    这个组件主要是解决开发者错误日志及时发现和追踪问题,是基于 springboot 封装错误日志告警功能,以及全局日志 traceId 跟踪,同时支持微服务和单体架构。

    特性

    • 支持钉钉,企业微信不同方式告警
    • 支持 traceId 全局日志跟踪,包括 web 请求,Async 任务,消息队列
    • 支持错误异常类或关键字忽略告警
    • 支持不同接口超时时间告警

    使用

    1. 增加依赖
    • springboot2.x 版本
      <dependency>
         <groupId>io.github.simonlu9</groupId>
         <artifactId>log-alarm-spring-boot-starter</artifactId>
         <version>1.1.1-SB2</version>
      </dependency>
      
    • springboot3.x 版本
       <dependency>
         <groupId>io.github.simonlu9</groupId>
         <artifactId>log-alarm-spring-boot-starter</artifactId>
         <version>1.1.1-SB3</version>
      </dependency>
    

    使用

    # 添加配置
    log-alarm:
      #当开启时候,会自动在 MDC 注入 traceID 属性
      enableTraceId: true
      #mode 可选 wordWechat|dingding
      timeout:
        settings:
          - urlPattern: "^/.*$" # 匹配以 /test 开头的所有路径
            threshold: 1000 # 超时时间(毫秒)
      mode: workWechat
      #机器人人配置
      webhook: xxx
      exclude:
        #忽略异常类,多个逗号隔开
        throwable: java.lang.RuntimeException
        #忽略关键字配置
        keyword:
    
    # logback 配置
    <configuration>
        <springProperty scope="context" name="logFile" source="logging.file.name" />
        #引用 LogAlarmAppender 才能告警
        <appender name="LOG_ALARM" class="com.ljw.logalarm.core.appender.LogAlarmAppender">
            #指定过滤器进行 exclude 相关过滤
            <filter class="com.ljw.logalarm.core.filter.AlarmFilter"></filter>
        </appender>
    
        <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
            <!-- 输出格式 -->
            <encoder>
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%X{traceId}] [%thread] %logger{50} - %msg%n</pattern>
            </encoder>
        </appender>
        <root level="INFO">
            <appender-ref ref="LOG_ALARM"/>
            <appender-ref ref="STDOUT"/>
    
        </root>
    </configuration>
    

    效果

    链路追踪: fb2aa22424
    应用名: xxx
    线程名称: http-nio-9057-exec-7
    用户编号: 
    请求信息: GET /sys/sync/orders
    请求参数: {"hours":"1"}
    请求 body: null
    异常来源: com.ljw.logalarm.core.filter.ExecutionTimeFilter
    日志内容: Request to [/sys/sync/orders] exceeded timeout. Duration: 67457 ms, Threshold: 60000 ms
    异常时间: 2025-01-23 14:01:08
    异常描述: 
    详细信息:
    
    链路追踪: 85b7bc263f
    应用名: xxx
    线程名称: http-nio-9057-exec-10
    用户编号: 
    请求信息: GET /sys/sync/orders
    请求参数: {"hours":"1"}
    请求 body: null
    异常来源: xxxxxx.ControllerExceptionHandler
    日志内容: [handleException] catch unhandled exception
    异常时间: 2025-01-23 12:01:07
    异常描述: org.springframework.jdbc.BadSqlGrammarException
    详细信息:
    org.springframework.jdbc.BadSqlGrammarException: 
    ### Error querying database.  Cause: java.sql.SQLSyntaxErrorException: Unknown column 'updated_at' in 'field list'
    
    

    springboot @Async 自定义线程池

       @Bean
        public Executor customTaskExecutor() {
            TraceIdThreadPoolTaskExecutor executor =  new TraceIdThreadPoolTaskExecutor();
            executor.setThreadNamePrefix("trace-id-task-executor-");
            executor.setCorePoolSize(4);
            return executor;
        }
    

    springboot @Schedule 自定义线程池

        @Bean
        public ThreadPoolTaskScheduler taskScheduler() {
            ThreadPoolTaskScheduler scheduler = new TraceIdThreadPoolScheduleTaskExecutor();
            scheduler.setPoolSize(5); // 配置线程池大小
            scheduler.setThreadNamePrefix("Scheduler-");
            return scheduler;
        }
    

    -- 欢迎大家提需求完善此插件 -- github 链接 https://github.com/simonlu9/log-alarm-spring-boot

    2 条回复    2025-01-23 16:39:48 +08:00
    gaobh
        1
    gaobh  
       7 天前 via iPhone
    啊……不是部署一套 EFK 就完事了吗,不用侵入
    simonlu9
        2
    simonlu9  
    OP
       7 天前
    @gaobh elk 太重了,直接加个依赖方便点,轻装上阵
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1899 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 15:14 · PVG 23:14 · LAX 07:14 · JFK 10:14
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.