PHP 日志系统的最佳搭档:一个 Go 写的远程日志收集服务

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 为了不再 SSH 上去翻日志,我写了个 Go 小脚本,用来接收远程日志。PHP 负责记录日志,Go 负责存储和展示,按天存储、支持 API 访问、可远程管理,终于能第一时间知道项目炸了。

之前折腾了一个 PHP 日志系统,终于能让项目的错误信息乖乖地记录到日志里了。但问题又来了:日志是存了,可我怎么知道它什么时候爆炸了?

有些错误轻微到无关紧要,有些错误严重到能把整个系统送走,但如果我要知道这些错误,我得 SSH 进服务器,然后手动去翻日志,效率低得要死。而且,多个服务器运行着同样的代码,有的报错,有的没事,我根本不知道到底哪里出了问题。

于是,为了在 bug 出现的时候第一时间收到消息,而不是等老板过来吼我,我写了一个 Go 小脚本,它专门用来:

  • 接收远程日志(让 PHP 直接把 bug 抛过来)
  • 存储日志信息(按天存储,避免日志混乱)
  • 提供查看和管理接口(可以用浏览器访问日志)
  • 支持删除指定行日志(万一哪条日志看着不爽,删!)

这样,我就能一眼看到错误日志,而不是等到 bug 发酵成灾难级事故。

先把已经实现好的仓库地址贴出来:点击前往GitHub


这个 Go 脚本干了些什么?

它其实就是一个简单的 HTTP 服务器,提供了几个 API:

📥 /write(POST)—— 发送日志

任何项目出错了,可以 POST​ 一条日志过来,它会存入文件,每条一行,格式是 JSON。

示例

curl -X POST http://localhost:9999/write -d '{
    "time": "2025-03-15 12:00:00",
    "level": "ERROR",
    "message": "数据库连接失败",
    "context": {
        "project": "my-app",
        "ip": "192.168.1.10",
        "method": "GET",
        "full_url": "https://example.com/api",
        "trace": {
            "message": "SQLSTATE[HY000] General error",
            "file": "/var/www/html/index.php",
            "line": 42,
            "trace": [
                {
                    "file": "/var/www/html/index.php",
                    "line": 42,
                },
                {
                    "file": "/var/www/html/index.php",
                    "line": 42,
                }
            ]
        }
    }
}'

这样日志就会被存进 data/data_2025-03-15.txt​ 里,每天一个文件。


👀 /read(GET)—— 查看日志

浏览器访问 http://ip地址:端口/read​,就能看到当天的所有日志。
为了陌生人看到我们愚蠢的错误,加了 BasicAuth 认证,默认账号 admin​,密码 123123​(当然,你该改的)。

示例

访问:http://localhost:9999/read

返回内容:

未命名 5.png

是不是比翻 .log文件爽多了?


🗑 /delete(DELETE)—— 删除指定行

有时候日志堆积了太多无关紧要的内容,或者因为问题已经解决了,想删掉某些行,就可以用这个接口。在网页上也可以直接删除。

示例

curl -X DELETE "http://localhost:9999/delete?date=2025-03-15&line=2"

这样,2025-03-15 的日志第 2 行就会被删掉。


代码细节

  • 按天存储日志,每天一个 data_YYYY-MM-DD.txt​,方便管理。
  • 支持并发写入,用了 sync.RWMutex​ 解决并发冲突。
  • 支持清理过期日志,默认只保留 7 天,过期自动清理。
  • 加了 HTTP 认证,防止乱看日志。
  • 错误日志本身也会记录错误(比如写入失败,自己再打个日志)。

完整代码都在仓库里了,就不贴了,反正逻辑就是接收 JSON -> 写入文件 -> 读文件 -> 提供管理接口,没啥特别复杂的。


最后

终于,这个日志收集的活干完了,项目的日志总算有个统一的归宿
Go 有的时候还真的挺适合做这种完全独立的小型单功能网页服务,这样以后再有 bug,我不用 SSH 上去翻来翻去,而是直接打开个网页,就能看到错误信息,第一时间处理掉。

不过,光有日志收集还不够,下一步我可能会:

  • 加个 邮件通知(但我怕邮箱会爆)
  • 或者……就先摆烂吧 🙃

今天就这样,明天的 bug,就留给明天的自己吧。

相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
相关文章
|
30天前
|
存储 监控 算法
防止员工泄密软件中文件访问日志管理的 Go 语言 B + 树算法
B+树凭借高效范围查询与稳定插入删除性能,为防止员工泄密软件提供高响应、可追溯的日志管理方案,显著提升海量文件操作日志的存储与检索效率。
77 2
|
2月前
|
Prometheus 监控 Cloud Native
基于docker搭建监控系统&日志收集
Prometheus 是一款由 SoundCloud 开发的开源监控报警系统及时序数据库(TSDB),支持多维数据模型和灵活查询语言,适用于大规模集群监控。它通过 HTTP 拉取数据,支持服务发现、多种图表展示(如 Grafana),并可结合 Loki 实现日志聚合。本文介绍其架构、部署及与 Docker 集成的监控方案。
335 122
基于docker搭建监控系统&日志收集
WGLOG日志管理系统是怎么收集日志的
WGLOG通过部署Agent客户端采集日志,Agent持续收集指定日志文件并上报Server,Server负责展示与分析。Agent与Server需保持相同版本。官网下载地址:www.wgstart.com
|
5月前
|
监控 API 开发工具
HarmonyOS Next的HiLog日志系统完全指南:从入门到精通
本文深入解析HarmonyOS Next的HiLog日志系统,涵盖日志级别、核心API、隐私保护与高级回调功能,助你从入门到精通掌握这一重要开发工具。
345 1
|
27天前
|
机器学习/深度学习 人工智能 JSON
PHP从0到1实现 AI 智能体系统并且训练知识库资料
本文详解如何用PHP从0到1构建AI智能体,涵盖提示词设计、记忆管理、知识库集成与反馈优化四大核心训练维度,结合实战案例与系统架构,助你打造懂业务、会进化的专属AI助手。
178 6
|
2月前
|
Ubuntu
在Ubuntu系统上设置syslog日志轮替与大小限制
请注意,在修改任何系统级别配置之前,请务必备份相应得原始档案并理解每项变更可能带来得影响。
264 2
|
7月前
|
消息中间件 缓存 弹性计算
纯PHP+MySQL手搓高性能论坛系统!代码精简,拒绝臃肿
本内容分享了一套经实战验证的社交系统架构设计,支撑从1到100万用户的发展,并历经6次流量洪峰考验。架构涵盖客户端层(App、小程序、公众号)、接入层(API网关、负载均衡、CDN)、业务服务层(用户、内容、关系、消息等服务)、数据层(MySQL、Redis、MongoDB等)及运维监控层(日志、监控、告警)。核心设计包括数据库分库分表、多级缓存体系、消息队列削峰填谷、CQRS模式与热点数据动态缓存。同时提供应对流量洪峰的弹性伸缩方案及降级熔断机制,并通过Prometheus实现全链路监控。开源建议结构清晰,适合大型社交平台构建与优化。
285 11
|
4月前
|
小程序 安全 关系型数据库
专业打造一款圈子源码软件系统 / 后端 PHP 搭建部署一样实现利益化
本教程详解基于PHP后端与Uni-app的小程序开发全流程,涵盖技术选型、环境搭建、源码导入、接口对接及功能实现。采用Laravel/Symfony框架,结合MySQL/PostgreSQL数据库,使用WebSocket实现实时通信,并集成IM SDK实现音视频聊天。前端使用Uni-app开发,支持跨平台运行。教程包含完整部署流程与安全优化方案,助力快速搭建高性能、安全稳定的小程序系统。
356 5
|
6月前
|
存储 消息中间件 前端开发
PHP后端与uni-app前端协同的校园圈子系统:校园社交场景的跨端开发实践
校园圈子系统校园论坛小程序采用uni-app前端框架,支持多端运行,结合PHP后端(如ThinkPHP/Laravel),实现用户认证、社交关系管理、动态发布与实时聊天功能。前端通过组件化开发和uni.request与后端交互,后端提供RESTful API处理业务逻辑并存储数据于MySQL。同时引入Redis缓存热点数据,RabbitMQ处理异步任务,优化系统性能。核心功能包括JWT身份验证、好友系统、WebSocket实时聊天及活动管理,确保高效稳定的用户体验。
408 4
PHP后端与uni-app前端协同的校园圈子系统:校园社交场景的跨端开发实践
|
4月前
|
存储
WGLOG日志管理系统可以采集网络设备的日志吗
WGLOG日志审计系统提供开放接口,支持外部获取日志内容后发送至该接口,实现日志的存储与分析。详情请访问:https://www.wgstart.com/wglog/docs9.html