温馨提示×

debian golang日志如何定时清

小樊
45
2026-09-22 10:01:33
栏目: 编程语言

在 Debian 上,用 Go 写的程序产生的日志 想要“定时清理”,通常有三种常见做法,按推荐程度排序:


一、推荐做法:用 logrotate(系统级,最省心)

适合:所有 Go 程序(只要日志写到文件)

1. 假设你的 Go 日志路径

/var/log/myapp/app.log

2. 新建 logrotate 配置

sudo vim /etc/logrotate.d/myapp

内容示例:

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

参数说明

  • daily:每天轮转
  • rotate 7:保留 7 份
  • compress:压缩旧日志
  • copytruncate:不重启 Go 程序就能截断日志(很重要)

3. 手动测试

sudo logrotate -d /etc/logrotate.d/myapp   # 模拟
sudo logrotate -f /etc/logrotate.d/myapp   # 强制执行

✅ 不需要改 Go 代码 ✅ Debian 默认每天自动跑


二、Go 程序内部自动切分(写代码)

适合:你控制 Go 代码,且不想用系统工具

使用 lumberjack

import "gopkg.in/natefinch/lumberjack.v2"

log.SetOutput(&lumberjack.Logger{
    Filename:   "/var/log/myapp/app.log",
    MaxSize:    10, // MB
    MaxBackups: 7,
    MaxAge:     7,  // 天
    Compress:   true,
})

优点:

  • 跨平台
  • 不依赖系统

缺点:

  • 需要改代码

三、用 cron 定时删(简单粗暴)

不推荐,但可用

crontab -e

每天凌晨删 7 天前日志:

0 0 * * * find /var/log/myapp -name "*.log" -mtime +7 -delete

⚠ 风险:

  • 正在写的日志可能被删
  • 不会截断当前文件

总结建议

场景 推荐方案
生产环境 ✅ logrotate
自己写的 Go 服务 lumberjack
临时脚本 cron

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

  • 日志路径
  • 是否用 systemd
  • Go 是否自己写文件

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

0 踩