在 Debian 上,“golang 日志怎么清空”通常分两种场景:程序自己写的日志文件 或 systemd / 服务管理的日志。下面按常见情况给你说明。
> /path/to/your/logfile.log
或
truncate -s 0 /path/to/your/logfile.log
✅ 不会删除文件
✅ 程序继续写日志(文件 inode 不变)
cat /dev/nullcat /dev/null > /path/to/your/logfile.log
rm /path/to/your/logfile.log
⚠️ 如果程序没用 O_APPEND 或没重新打开文件,可能会丢失日志写入能力。
journalctl -u your-service.service
sudo journalctl --vacuum-time=1s -u your-service.service
或直接清空全部 journal 日志:
sudo journalctl --vacuum-size=1B
⚠️ journal 日志不能直接“清空文件”,只能按时间 / 大小裁剪。
示例 /etc/logrotate.d/mygolang:
/var/log/myapp/*.log {
daily
rotate 7
missingok
notifempty
compress
copytruncate
}
copytruncate 很关键:
如果你是自己写日志:
logrotatelumberjack 自动切割日志import "gopkg.in/natefinch/lumberjack.v2"
log.SetOutput(&lumberjack.Logger{
Filename: "/var/log/myapp/app.log",
MaxSize: 10, // MB
MaxBackups: 7,
MaxAge: 30,
})
| 场景 | 清空方式 |
|---|---|
| 自己写的日志文件 | > file.log |
| systemd 服务 | journalctl --vacuum-* |
| 生产环境 | logrotate |
如果你能贴一下:
我可以给你更精确的方法。