扔掉笨重的 Logstash!基于 Spring Boot 日志采集方案正式發布!
背景導入:拋開“重裝備”,選擇輕量而優雅的日志采集方案
在日常的 Spring Boot 應用中,日志是定位問題、分析行為和運維監控的重要數據源。傳統日志管理方式中,ELK(Elasticsearch + Logstash + Kibana)、EFK(Fluentd 代替 Logstash)是主流方案。然而,這些方案在配置復雜度、運維成本、資源消耗等方面對開發者并不友好。
特別是 Logstash/Filebeat 這類采集組件,雖然功能強大,但:
- 配置繁雜,規則維護成本高;
- 對新手不夠友好,學習門檻高;
- 系統路徑或結構變動時,易導致采集失效;
- 必須單獨部署采集服務,增加資源消耗。
我們是否可以不用改動業務代碼,僅通過一個輕量插件,就能實現日志自動采集并發送?zero-log 便是為此而生。
為什么選擇 zero-log?
zero-log 是一個為 Spring Boot 應用量身打造的日志采集組件,主打“零侵入、低配置、輕部署”。它基于 Spring Boot 默認的日志框架 logback 進行拓展,在不改動任何業務日志邏輯的前提下,實現日志的批量異步發送。
優勢一覽:
特性 | 傳統 Logstash |
|
規則配置 | 需手寫解析規則 | 無需解析配置 |
侵入性 | 需單獨部署服務 | 業務代碼零改動 |
資源占用 | 高 | 極低 |
實現難度 | 高 | 2 分鐘集成 |
數據傳輸方式 | 監聽文件系統 | 直接 HTTP 發送 |
發送模式 | 單條或按行 | 批量異步發送 |
適配性 | 依賴系統路徑 | 與路徑無關,統一接收地址 |
完整示例項目結構
/opt/projects/com/icoderoad/logcollector
├── pom.xml
├── src
│ ├── main
│ │ ├── java
│ │ │ └── com
│ │ │ └── icoderoad
│ │ │ └── logcollector
│ │ │ ├── LogCollectorApplication.java
│ │ │ └── controller
│ │ │ └── DemoController.java
│ │ └── resources
│ │ ├── application.yml
│ │ └── logback-spring.xml
└── README.md依賴配置(pom.xml)
<dependency>
<groupId>io.github.kuafucv</groupId>
<artifactId>zero-log</artifactId>
<version>0.0.5</version>
</dependency>配置文件詳解
application.yml 示例
路徑:src/main/resources/application.yml
spring:
application:
name: log-collector
profiles:
active: dev
logging:
config: classpath:logback-spring.xml
custom:
log:
endpoint-url: http://localhost:8081/log/receive路徑:src/main/resources/logback-spring.xml
<configuration debug="false">
<springProperty name="app_name" source="spring.application.name"/>
<springProperty name="env" source="spring.profiles.active"/>
<conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter"/>
<conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/>
<conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/>
<property name="FILE_LOG_PATTERN"
value="${FILE_LOG_PATTERN:-[%X{TRACE_ID}] %d{yyyy-MM-dd HH:mm:ss.SSS} %5p --- [%t] %-40.40logger{39} : %m%n%wEx}"/>
<property name="FILE_LOG_CHARSET" value="UTF-8"/>
<appender name="BATCH_HTTP" class="io.github.kuafucv.zero.log.HttpBatchAppender">
<encoder>
<pattern>${FILE_LOG_PATTERN}</pattern>
<charset>${FILE_LOG_CHARSET}</charset>
</encoder>
<endpointUrl>${custom.log.endpoint-url}</endpointUrl>
<includeMDC>true</includeMDC>
<appName>${app_name}</appName>
<env>${env}</env>
<flushIntervalInSeconds>3</flushIntervalInSeconds>
<httpReadTimeoutInMillis>1000</httpReadTimeoutInMillis>
<httpConnectionTimeoutInMillis>1000</httpConnectionTimeoutInMillis>
<maxNumberOfBuckets>8</maxNumberOfBuckets>
<maxBucketSizeInKilobytes>1024</maxBucketSizeInKilobytes>
</appender>
<root level="INFO">
<appender-ref ref="BATCH_HTTP"/>
</root>
</configuration>日志數據格式說明
日志發送的 JSON 結構如下所示,便于遠程平臺進行解析、持久化與展示:
{
"patternLog": "2025-07-07 10:00:00.123 INFO --- [main] com.icoderoad.DemoController : 請求成功",
"timestamp": 1720349823000,
"level": "INFO",
"pid": "1034",
"thread": "main",
"logger": "com.icoderoad.DemoController",
"message": "請求成功",
"mdc": {},
"exception": {
"className": "",
"message": "",
"stackTrace": []
}
}日志接收接口說明(endpointUrl)
該接口需支持:
- HTTP POST 請求
- Content-Type: application/json
- 接收上述格式的數據
你可以對接自研的日志中心服務,也可使用官方推薦的平臺:
開源地址:
https://gitee.com/kuafucv/zero-log
https://gitee.com/kuafucv/zero-observer
推薦搭配部署路徑示意
/usr/local/services/
├── log-collector/ # Spring Boot 服務應用,集成 zero-log 插件
└── zero-observer/ # 日志接收與展示平臺可通過 nginx 做一層統一轉發,實現日志統一匯總展示。
總結:真正實現日志采集“開箱即用”
通過引入 zero-log,Spring Boot 應用日志采集不再需要搭建復雜的中間件或編寫繁瑣的配置規則。它在不侵入業務邏輯、不增加部署負擔的前提下,實現了:
- 日志異步采集 + 批量傳輸
- 零代碼改動 + 快速對接平臺
- 高性能 + 高可用
如果你也厭倦了復雜的 Logstash 配置,不妨試試 zero-log。在兩分鐘內,就能搭建出你自己的日志采集系統。





























