在 Debian 环境下实现 Golang 日志轮转,操作并不复杂。许多开发者在项目上线后才发现日志文件不断膨胀,最终导致磁盘空间被撑爆。本文将详细介绍如何借助轻量级库 lumberjack 并结合系统自带的 logrotate,将日志管理安排得井井有条。

首先准备好运行环境——确保 Go 语言环境已正确安装。如果尚未安装,可以前往官网下载对应版本,或通过包管理器 apt install golang 快速安装,根据个人习惯选择即可。
接下来安装 lumberjack 库。在项目目录中执行以下命令:
go get github.com/natefinch/lumberjack
然后编写代码。在 main.go 中引入该库,并创建一个基于 lumberjack 驱动的日志记录器。以下是一个标准用法示例:
package main
import (
"log"
"github.com/natefinch/lumberjack"
)
func main() {
logger := log.New(&lumberjack.Logger{
Filename: "/var/log/myapp.log", // 日志文件路径
MaxSize: 10, // 每个日志文件最大 10MB
MaxBackups: 3, // 保留 3 个旧文件
MaxAge: 28, // 保留 28 天
Compress: true, // 旧日志压缩
})
logger.Println("This is a log message.")
}
各参数含义非常直观:MaxSize 控制单个日志文件的大小上限,MaxBackups 决定保留的旧文件数量,MaxAge 设置日志文件的最大保留天数,Compress 则指定是否对旧日志进行压缩。编译运行后,日志便会按照既定规则自动轮转,完全无需人工干预。
如果你希望从系统层面统一管理所有日志的轮转策略,或者需要更精细的控制(例如按时间周期进行轮转),那么可以使用 Debian 自带的 logrotate 工具。它与 lumberjack 互为补充,互不冲突。
先创建一个配置文件,例如 /etc/logrotate.d/myapp:
sudo nano /etc/logrotate.d/myapp
然后在文件中写入以下内容:
/var/log/myapp.log {
size 10M
rotate 3
compress
missingok
notifempty
create 0640 root adm
}
这些参数与 lumberjack 中的配置几乎一一对应:size 10M 对应 MaxSize,rotate 3 对应 MaxBackups,compress 对应 Compress。保存后,logrotate 就会按照计划自动处理日志轮转。如果想立即验证效果,可以手动触发:
sudo logrotate -f /etc/logrotate.conf
两种方式各有优势:lumberjack 内嵌于代码中,适合独立部署的 Go 应用程序,具有良好的可移植性;logrotate 作为系统级工具,适合统一管理多个服务的日志。在实际项目中,许多开发者会选择同时使用两种方案:应用内部通过 lumberjack 实现基础轮转,再配合 logrotate 进行额外的压缩、清理及权限控制,形成双重保障。
通过这套组合策略,你的日志管理将变得稳固可靠,再也不用担心磁盘空间被日志文件耗尽。
