扔掉笨重的 Logstash!基于 Spring Boot 日志采集方案正式發(fā)布!
背景導(dǎo)入:拋開“重裝備”,選擇輕量而優(yōu)雅的日志采集方案
在日常的 Spring Boot 應(yīng)用中,日志是定位問題、分析行為和運維監(jiān)控的重要數(shù)據(jù)源。傳統(tǒng)日志管理方式中,ELK(Elasticsearch + Logstash + Kibana)、EFK(Fluentd 代替 Logstash)是主流方案。然而,這些方案在配置復(fù)雜度、運維成本、資源消耗等方面對開發(fā)者并不友好。
特別是 Logstash/Filebeat 這類采集組件,雖然功能強大,但:
- 配置繁雜,規(guī)則維護成本高;
 - 對新手不夠友好,學習門檻高;
 - 系統(tǒng)路徑或結(jié)構(gòu)變動時,易導(dǎo)致采集失效;
 - 必須單獨部署采集服務(wù),增加資源消耗。
 
我們是否可以不用改動業(yè)務(wù)代碼,僅通過一個輕量插件,就能實現(xiàn)日志自動采集并發(fā)送?zero-log 便是為此而生。
為什么選擇 zero-log?
zero-log 是一個為 Spring Boot 應(yīng)用量身打造的日志采集組件,主打“零侵入、低配置、輕部署”。它基于 Spring Boot 默認的日志框架 logback 進行拓展,在不改動任何業(yè)務(wù)日志邏輯的前提下,實現(xiàn)日志的批量異步發(fā)送。
優(yōu)勢一覽:
特性  | 傳統(tǒng) Logstash  | 
  | 
規(guī)則配置  | 需手寫解析規(guī)則  | 無需解析配置  | 
侵入性  | 需單獨部署服務(wù)  | 業(yè)務(wù)代碼零改動  | 
資源占用  | 高  | 極低  | 
實現(xiàn)難度  | 高  | 2 分鐘集成  | 
數(shù)據(jù)傳輸方式  | 監(jiān)聽文件系統(tǒng)  | 直接 HTTP 發(fā)送  | 
發(fā)送模式  | 單條或按行  | 批量異步發(fā)送  | 
適配性  | 依賴系統(tǒng)路徑  | 與路徑無關(guān),統(tǒng)一接收地址  | 
完整示例項目結(jié)構(gòu)
/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>日志數(shù)據(jù)格式說明
日志發(fā)送的 JSON 結(jié)構(gòu)如下所示,便于遠程平臺進行解析、持久化與展示:
{
  "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
 - 接收上述格式的數(shù)據(jù)
 
你可以對接自研的日志中心服務(wù),也可使用官方推薦的平臺:
開源地址:
https://gitee.com/kuafucv/zero-log
https://gitee.com/kuafucv/zero-observer
推薦搭配部署路徑示意
/usr/local/services/
├── log-collector/                 # Spring Boot 服務(wù)應(yīng)用,集成 zero-log 插件
└── zero-observer/                # 日志接收與展示平臺可通過 nginx 做一層統(tǒng)一轉(zhuǎn)發(fā),實現(xiàn)日志統(tǒng)一匯總展示。
總結(jié):真正實現(xiàn)日志采集“開箱即用”
通過引入 zero-log,Spring Boot 應(yīng)用日志采集不再需要搭建復(fù)雜的中間件或編寫繁瑣的配置規(guī)則。它在不侵入業(yè)務(wù)邏輯、不增加部署負擔的前提下,實現(xiàn)了:
- 日志異步采集 + 批量傳輸
 - 零代碼改動 + 快速對接平臺
 - 高性能 + 高可用
 
如果你也厭倦了復(fù)雜的 Logstash 配置,不妨試試 zero-log。在兩分鐘內(nèi),就能搭建出你自己的日志采集系統(tǒng)。















 
 
 











 
 
 
 