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

简介: 为了不再 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实时生图绘板
相关文章
|
7月前
|
存储 监控 算法
防止员工泄密软件中文件访问日志管理的 Go 语言 B + 树算法
B+树凭借高效范围查询与稳定插入删除性能,为防止员工泄密软件提供高响应、可追溯的日志管理方案,显著提升海量文件操作日志的存储与检索效率。
230 2
|
11月前
|
JSON 中间件 Go
Go 网络编程:HTTP服务与客户端开发
Go 语言的 `net/http` 包功能强大,可快速构建高并发 HTTP 服务。本文从创建简单 HTTP 服务入手,逐步讲解请求与响应对象、URL 参数处理、自定义路由、JSON 接口、静态文件服务、中间件编写及 HTTPS 配置等内容。通过示例代码展示如何使用 `http.HandleFunc`、`http.ServeMux`、`http.Client` 等工具实现常见功能,帮助开发者掌握构建高效 Web 应用的核心技能。
539 61
|
11月前
|
开发框架 安全 前端开发
Go Web开发框架实践:模板渲染与静态资源服务
Gin 是一个功能强大的 Go Web 框架,不仅适用于构建 API 服务,还支持 HTML 模板渲染和静态资源托管。它可以帮助开发者快速搭建中小型网站,并提供灵活的模板语法、自定义函数、静态文件映射等功能,同时兼容 Go 的 html/template 引擎,具备高效且安全的页面渲染能力。
|
11月前
|
开发框架 JSON 中间件
Go语言Web开发框架实践:使用 Gin 快速构建 Web 服务
Gin 是一个高效、轻量级的 Go 语言 Web 框架,支持中间件机制,非常适合开发 RESTful API。本文从安装到进阶技巧全面解析 Gin 的使用:快速入门示例(Hello Gin)、定义 RESTful 用户服务(增删改查接口实现),以及推荐实践如参数校验、中间件和路由分组等。通过对比标准库 `net/http`,Gin 提供更简洁灵活的开发体验。此外,还推荐了 GORM、Viper、Zap 等配合使用的工具库,助力高效开发。
|
关系型数据库 MySQL PHP
源码编译安装LAMP(HTTP服务,MYSQL ,PHP,以及bbs论坛)
通过以上步骤,你可以成功地在一台Linux服务器上从源码编译并安装LAMP环境,并配置一个BBS论坛(Discuz!)。这些步骤涵盖了从安装依赖、下载源代码、配置编译到安装完成的所有细节。每个命令的解释确保了过程的透明度,使即使是非专业人士也能够理解整个流程。
467 18
|
存储 监控 算法
基于 PHP 语言的滑动窗口频率统计算法在公司局域网监控电脑日志分析中的应用研究
在当代企业网络架构中,公司局域网监控电脑系统需实时处理海量终端设备产生的连接日志。每台设备平均每分钟生成 3 至 5 条网络请求记录,这对监控系统的数据处理能力提出了极高要求。传统关系型数据库在应对这种高频写入场景时,性能往往难以令人满意。故而,引入特定的内存数据结构与优化算法成为必然选择。
351 3
|
JSON API Go
基于责任链与策略模式的轻量级PHP日志库设计
项目日志乱成一团,bug 时好时坏,服务器问题难以复现?我写了个 PHP 日志系统,第一时间发现问题,避免跑路。实现了责任链模式+策略模式,让日志存储更灵活,支持多种输出方式。
|
Go UED
Go Web服务中如何优雅平滑重启?
在生产环境中,服务升级时如何确保不中断当前请求并应用新代码是一个挑战。本文介绍了如何使用 Go 语言的 `endless` 包实现服务的优雅重启,确保在不停止服务的情况下完成无缝升级。通过示例代码和测试步骤,详细展示了 `endless` 包的工作原理和实际应用。
475 3
|
7月前
|
存储 安全 Java
【Golang】(4)Go里面的指针如何?函数与方法怎么不一样?带你了解Go不同于其他高级语言的语法
结构体可以存储一组不同类型的数据,是一种符合类型。Go抛弃了类与继承,同时也抛弃了构造方法,刻意弱化了面向对象的功能,Go并非是一个传统OOP的语言,但是Go依旧有着OOP的影子,通过结构体和方法也可以模拟出一个类。
391 2

热门文章

最新文章