# Logsift **Repository Path**: cchanghui/logsift ## Basic Information - **Project Name**: Logsift - **Description**: 一个可以实现多项目日志采集,分析和转发功能的工具,基于Java语言编写。 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2018-01-09 - **Last Updated**: 2025-11-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: 开源项目 ## README # Logsift ## 需求背景 产线环境使用[阿里云SLS日志服务](https://help.aliyun.com/zh/sls/)实现应用程序日志采集,同时还可以很方便地实现日志过滤,将指定级别的日志信息发送到飞书群,使得开发人员能第一时间得到通知,方便及时定位和解决问题。 处于成本考虑,在开发联调环境和测试环境并未使用阿里云SLS日志服务,同时又希望能获得与使用阿里云SLS日志服务一样的功能,因此有了开发该工具的想法。 虽然目前已经有了一些比较成熟的工具,比如[Logstash](https://www.elastic.co/logstash),但是在使用过程中发现针对我的实际需求,Logstash使用起来并不灵活,甚至还存在一些限制,比如:无法控制发送飞书通知的频率(飞书机器人调用存在频率限制,在Logstash中灵活限制)。 ## 整体架构 ![](./doc/arch.png) ## 依赖组件 在本项目中使用Grok模式进行日志内容解析,用于实现对指定级别的日志内容进行过滤,关于Grok的介绍详见: [java使用grok解析日志文件](https://blog.csdn.net/wenqingping5/article/details/118546032) [grok语法定义和自己实践](https://www.cnblogs.com/sheng-247/articles/13496127.html) [Logstash日志解析的Grok模式详解](https://www.cnblogs.com/even160941/p/16326986.html) 例如,如下为日志内容: ```text 2025-08-08 20:44:54.543 [my-text-app-serv] [fea26f29ea414fcaa784fc6b87bff84b] [http-nio-8080-exec-11] ERROR c.s.c.f.ApiSignFilter - [doFilter,90] - check timestamp is fail, uri:/gm/game/v1/server/getSingleServerInfo timestamp:1754657089339 ``` 则对应的grok表达式为: ```text %{CUSTOM_TIMESTAMP:timestamp} \\[%{DATA:thread}\\] \\[%{DATA:trace_id}\\] \\[%{DATA:executor}\\] %{LOGLEVEL:level} %{DATA:class} - \\[%{DATA:method},%{NUMBER:line}\\] - %{GREEDYDATA:message} ``` 特别说明:如果采集的是全部日志内容,则无需配置Grok表达式。 ## 监控目录或文件 当需要监控指定目录下的多个文件时,按模式匹配: ```properties log.app.DrawioX.pathPattern=D:\\sun\\workspace_opensource_myself\\DrawioX\\logs\\*.log ``` 当然,也可以监控具体的文件: ```properties log.app.DrawioX.pathPattern=D:\\sun\\workspace_opensource_myself\\DrawioX\\logs\\drawiox.log ``` 总是监控文件最新内容的变化。 ## 特点 在不对业务系统产生入侵的情况下,以一种轻量级的方式实时采集日志信息,为系统监控和日志分析提供有力支撑。