news 2026/6/8 17:42:17

zero-log:一款嵌入式 Java 应用日志可视化工具,零配置、轻量级,开箱即用!

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
zero-log:一款嵌入式 Java 应用日志可视化工具,零配置、轻量级,开箱即用!

部署 ELK 或 EFK 太麻烦,运维成本高,我只想看一下应用的日志,远程服务器又不方便。有什么好的办法吗?zero-log一款嵌入式 Java 应用日志可视化工具,零配置、轻量级,开箱即用!

前言

在微服务架构下,日志集中查看通常依赖于 ELK 或 EFK 等重型基础设施。这些方案功能强大,但部署与运维成本比较高。对于中小团队项目或者个人开发者,在快速迭代的项目中,还是比较笨重的。

而在单体应用或单个 SpringBoot 服务的场景下,开发者往往只需要一个简单直观的方式:在浏览器里实时看日志、搜历史日志、看异常堆栈。

今天要介绍的zero-log就是这样一款能够让你一键接入、零代码变更、无需依赖其他中间件的嵌入式日志采集与可视化工具。

项目介绍

zero-log 提供两种运行模式以适应不同场景。

Lite模式(嵌入式模式):Lite模式下,zero-log 实现日志的自动采集和一站式轻量级日志查询页面,包括控制台日志与日志查询功能,并支撑日志数据导出。当前模式下仅支持单应用实例,适合个人开发者、中小型单体应用。需要多应用、多环境、多实例同时接入的,请使用 Standalone 模式

Standalone模式(独立模式):在Standalone 模式下,zero-log 专注于日志与监控数据的采集,并上报至 zero-observer 服务端。由 zero-observer 提供一站式可视化功能页面,支持多个应用、多环境、多实例统一接入与管理。

官网地址:
https://kuafucv.com/

Gitee 开源地址:

  • https://gitee.com/kuafucv/zero-log
  • https://gitee.com/kuafucv/zero-observer

快速接入

极简接入,零代码变更

zero-log 提供了Spring Boot Starter,接入流程极其简单,只需三步:

第一步:引入Maven依赖

  • SpringBoot 2.x
<dependency> <groupId>io.github.kuafucv</groupId> <artifactId>zero-log-spring-boot-starter</artifactId> <version>2.3.0</version> </dependency>
  • SpringBoot 3.x
<dependency> <groupId>io.github.kuafucv</groupId> <artifactId>zero-log-spring-boot3-starter</artifactId> <version>2.3.0</version> </dependency>

第二步:配置application.yml

zero: log: mode: lite enabled: true

第三步:启动类添加注解

@SpringBootApplication @EnableZeroLog public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }

启动服务

启动 Java 服务,http://127.0.0.1:8080/zero-log-web/index.html

看到日志控制台页面,则接入成功。

独立模式

独立模式下,zero-log 只负责采集日志,zero-observer 收集采集的客户端日志与监控数据,并提供开箱即用的可视化与管理功能。

独立模式下,除了支持日志的可视化,还支持接口性能监控、慢请求分析、调用链追踪、JVM可视化监控等功能,配置简单,开箱即用。

官方将这套组合形象地概括为一条公式:
zero-observer + zero-log = actuator + prometheus + grafana + elk/efk

zero-observer 部署

Mysql 初始化脚本

创建数据库:zero_observer,执行脚本:

CREATE TABLE `app_log_growth_trend` ( `id` bigint(20) NOT NULL, `create_time` datetime NOT NULL, `app` varchar(255) NOT NULL, `env` varchar(50) NOT NULL, `level` varchar(10) NOT NULL, `statistic_time` datetime NOT NULL, `log_count` int(11) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE `app_log_total_growth_trend` ( `id` bigint(20) NOT NULL, `create_time` datetime NOT NULL, `statistic_time` datetime NOT NULL, `log_count` bigint(20) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE `app_log_level_statistic` ( `id` bigint(20) NOT NULL, `create_time` datetime NOT NULL, `app` varchar(255) NOT NULL, `env` varchar(50) NOT NULL, `level` varchar(10) NOT NULL, `statistic_time` datetime NOT NULL, `log_count` int(11) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE `app_env_instance` ( `id` bigint(20) NOT NULL, `create_time` datetime NOT NULL, `app` varchar(255) NOT NULL, `env` varchar(50) NOT NULL, `ip` varchar(50) NOT NULL, `port` varchar(5) NOT NULL, `hostname` varchar(255) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE `app_log_statistic` ( `id` bigint(20) NOT NULL, `create_time` datetime NOT NULL, `app_log_statistic_counter_id` bigint(20) NOT NULL, `app` varchar(255) NOT NULL, `env` varchar(50) NOT NULL, `statistic_time` datetime NOT NULL, `log_count` bigint(20) NOT NULL DEFAULT '0', `slow_request_count` bigint(20) NOT NULL DEFAULT '0', `error_count` bigint(20) NOT NULL DEFAULT '0', `warn_count` bigint(20) NOT NULL DEFAULT '0', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE `app_log_statistic_counter` ( `id` bigint(20) NOT NULL, `create_time` datetime NOT NULL, `statistic_time` datetime NOT NULL, `statistic_status` int(11) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE `system_config` ( `id` bigint(20) NOT NULL COMMENT '主键', `create_time` datetime NOT NULL COMMENT '创建时间', `key_code` varchar(50) NOT NULL COMMENT 'key编码', `key_name` varchar(50) DEFAULT NULL COMMENT 'key 名称', `key_value` varchar(255) NOT NULL COMMENT 'key值', `enabled` int(11) NOT NULL DEFAULT '1' COMMENT '是否启用', PRIMARY KEY (`id`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; INSERT INTO `system_config` (`id`, `create_time`, `key_code`, `key_name`, `key_value`, `enabled`) VALUES (1, '2025-07-19 23:56:06', 'app_log_storage_days', '应用日志存储天数', '3', 1); CREATE TABLE `users` ( `id` bigint(20) NOT NULL, `create_time` datetime NOT NULL, `account` varchar(100) NOT NULL, `pwd` varchar(255) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE `token_info` ( `id` bigint(20) NOT NULL, `create_time` datetime NOT NULL, `subject` varchar(100) NOT NULL, `token` varchar(255) NOT NULL, `expire_time` datetime NOT NULL, `expire_timestamp` bigint(20) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE `license` ( `id` bigint(20) NOT NULL, `create_time` datetime NOT NULL, `content` text NOT NULL, `remark` text DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE `request_monitor_statistic` ( `id` bigint(20) NOT NULL, `create_time` datetime NOT NULL, `statistic_date` int(11) NOT NULL, `app` varchar(255) NOT NULL, `env` varchar(50) NOT NULL, `uri` varchar(255) NOT NULL, `execute_count` int(11) DEFAULT NULL, `rt_avg` float DEFAULT NULL, `rt_max` int(11) DEFAULT NULL, `rt_min` int(11) DEFAULT NULL, `slow_count` int(11) DEFAULT 0, `slow_avg` float DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE `request_mapping` ( `id` bigint(20) NOT NULL, `create_time` datetime NOT NULL, `app` varchar(255) NOT NULL, `env` varchar(50) NOT NULL, `ip` varchar(50) NOT NULL, `port` varchar(5) NOT NULL, `hostname` varchar(255) NOT NULL, `uri` varchar(255) DEFAULT NULL, `method` varchar(10) DEFAULT NULL, `handler_method` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; ALTER TABLE app_env_instance ADD online INT NULL; ALTER TABLE app_env_instance ADD last_heartbeat DATETIME NULL; ALTER TABLE request_monitor_statistic ADD req_method varchar(10) NULL; CREATE TABLE `app_env` ( `id` bigint(20) NOT NULL, `create_time` datetime NOT NULL, `app` varchar(255) NOT NULL, `env` varchar(50) NOT NULL, `gene` varchar(20) NOT NULL, `signature` varchar(100) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE `sys_lock` ( `id` bigint(20) NOT NULL, `create_time` datetime NOT NULL, `lock_name` varchar(100) NOT NULL, `status` INT NOT NULL, `last_heartbeat` datetime DEFAULT NULL, `holder` varchar(255) DEFAULT NULL, `holder_id` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE `app_env_whitelist` ( `id` bigint(20) NOT NULL, `create_time` datetime NOT NULL, `app` varchar(255) NOT NULL, `env` varchar(50) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

Docker 部署

# 拉取镜像 docker pull registry.cn-hangzhou.aliyuncs.com/kuafucv/zero-observer:2.2.0 # 启动容器 docker run -itd -p 8080:8080 --name zero-observer \ -e TZ=Asia/Shanghai \ -e ES_IP=127.0.0.1 \ -e ES_PORT=9200 \ -e ES_USERNAME=es \ -e ES_PASSWORD=es \ -e MYSQL_IP=127.0.0.1 \ -e MYSQL_PORT=3306 \ -e MYSQL_USERNAME=root \ -e MYSQL_PASSWORD=123456 \ registry.cn-hangzhou.aliyuncs.com/kuafucv/zero-observer:2.3.0

启动成功后,浏览器访问:http://127.0.0.1:8080/zero-observer/
默认用户密码:admin/123456

应用接入

只需要将 lite 模式下的 application.yml 配置文件进行修改即可。

zero: log: mode: standalone enabled: true server-url: http://127.0.0.1:8080/zero-observer

启动 Java 服务,等待日志自动上报至 zero-observer ,前往 zero-observer 查看对应数据。

总结

zero-log 和 zero-observer 的组合为Java开发者提供了一套轻量级、低门槛、零侵入的应用监控解决方案。与传统监控方案相比,它免去了繁琐的配置和额外的运维成本,在保持核心功能完备的同时,显著降低了使用门槛。无论是个人学习项目还是中小型企业正式上线,zero-log 都能以极简的方式满足日志监控需求。


🎁 福利时间

如果你正在备战面试或者想要学习其他知识,给大家推荐一个宝藏知识库,作者整理了一些列 Java 程序员需要掌握的核心知识,有需要的自取不谢。

知识库地址:https://farerboy.com/


版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/8 17:40:16

CloudCrowd实战案例:大规模PDF文本提取与OCR处理全攻略

CloudCrowd实战案例&#xff1a;大规模PDF文本提取与OCR处理全攻略 【免费下载链接】cloud-crowd Parallel Processing for the Rest of Us 项目地址: https://gitcode.com/gh_mirrors/cl/cloud-crowd CloudCrowd作为一款强大的并行处理框架&#xff0c;能够轻松应对大规…

作者头像 李华
网站建设 2026/6/8 17:40:13

如何用3行命令解决B站缓存视频无法播放的技术难题

如何用3行命令解决B站缓存视频无法播放的技术难题 【免费下载链接】m4s-converter 一个跨平台小工具&#xff0c;将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 当你发现精心收藏的B站视频突然变成灰色&#…

作者头像 李华
网站建设 2026/6/8 17:39:03

StackGAN-v2与AttnGAN对比分析:两大文本生成图像模型的优劣比较

StackGAN-v2与AttnGAN对比分析&#xff1a;两大文本生成图像模型的优劣比较 【免费下载链接】StackGAN-v2 项目地址: https://gitcode.com/gh_mirrors/st/StackGAN-v2 想要从文本描述生成逼真图像吗&#xff1f;&#x1f914; 今天我们来深入对比分析文本生成图像领域的…

作者头像 李华
网站建设 2026/6/8 17:37:35

GPT-5.4与AI自改进:从界面操作到训练优化的工程实践

1. 项目概述&#xff1a;当“AI自己改自己”从论文标题变成周报头条这周刷到的两则新闻&#xff0c;表面看风马牛不相及——一边是OpenAI高调发布GPT-5.4&#xff0c;另一边是Andrej Karpathy在个人博客里晒出一段跑在自家服务器上的Python脚本&#xff0c;说它“自己调参、自己…

作者头像 李华
网站建设 2026/6/8 17:37:14

如何零基础使用Upscayl实现AI图像超分辨率

如何零基础使用Upscayl实现AI图像超分辨率 【免费下载链接】upscayl &#x1f199; Upscayl - #1 Free and Open Source AI Image Upscaler for Linux, MacOS and Windows. 项目地址: https://gitcode.com/GitHub_Trending/up/upscayl 你是否曾遇到过这样的情况&#xf…

作者头像 李华