温馨提示×

golang在debian日志如何分割

小樊
36
2026-09-25 11:00:49
栏目: 编程语言

在 Debian 上,Golang 程序本身不会自动分割日志,通常需要借助外部工具或日志库来实现日志分割。下面按常见方案给你讲清楚。


一、推荐方案(最常用):使用 logrotate(系统级)

适合: 所有 Golang 程序(无论用什么日志库)

1. 假设你的 Go 程序日志路径

/var/log/myapp/app.log

2. 创建 logrotate 配置

sudo vim /etc/logrotate.d/myapp

内容示例:

/var/log/myapp/*.log {
    daily
    rotate 7
    missingok
    notifempty
    compress
    delaycompress
    copytruncate
}

参数说明

  • daily:每天分割
  • rotate 7:保留 7 份
  • compress:压缩旧日志
  • copytruncate:关键,不重启 Go 程序也能继续写日志

3. 手动测试

sudo logrotate -f /etc/logrotate.d/myapp

✅ 优点

  • 稳定、官方推荐
  • 不需要改 Go 代码
  • 适合生产环境

二、Go 代码内部分割(lumberjack)

适合: 想让程序自己管理日志

示例(使用 zap + lumberjack)

import (
    "gopkg.in/natefinch/lumberjack.v2"
    "go.uber.org/zap"
)

logger := zap.New(zapcore.NewCore(
    zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig()),
    zapcore.AddSync(&lumberjack.Logger{
        Filename:   "/var/log/myapp/app.log",
        MaxSize:    10, // MB
        MaxBackups: 7,
        MaxAge:     7,  // days
        Compress:   true,
    }),
    zap.InfoLevel,
))

✅ 优点

  • 不依赖系统
  • 可跨平台

❌ 缺点

  • 需要改代码
  • 不如 logrotate 灵活

三、systemd 方式(不推荐单独用)

如果你用 systemd 启动 Go 程序:

StandardOutput=append:/var/log/myapp/app.log

但 systemd 不会自动切割日志,仍需 logrotate。


四、总结建议

场景 推荐方式
生产服务 ✅ logrotate
容器 / 跨平台 ✅ lumberjack
简单脚本 logrotate

如果你愿意,可以告诉我:

  • 你的 Go 日志库(log / zap / logrus)
  • 是否用 systemd
  • 日志量大小

我可以帮你写一份可直接用的配置。

0 踩