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

28 天前
simonlu9  simonlu9

log-alarm-springboot-starter

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

特性

使用

  1. 增加依赖
   <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

711 次点击
所在节点    推广
2 条回复
gaobh
28 天前
啊……不是部署一套 EFK 就完事了吗,不用侵入
simonlu9
28 天前
@gaobh elk 太重了,直接加个依赖方便点,轻装上阵

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1107345

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX