在 CentOS 上“清理 Golang 日志”通常分几种情况,取决于日志写在哪里、用什么方式记录。下面按常见场景给你一套实用做法。
常见路径:
/var/log/xxx.log
/home/app/logs/xxx.log
./logs/xxx.log
查看占用:
du -sh /var/log/*.log
ls -lh /var/log/xxx.log
不要直接 rm,否则正在运行的服务可能写不了日志。
# 清空日志(文件还在,程序可继续写)
> /var/log/xxx.log
或:
truncate -s 0 /var/log/xxx.log
例如:
xxx.log.20240101
xxx.log.2024-01-01
删除 7 天前的:
find /var/log -name "xxx.log.*" -mtime +7 -delete
ls /etc/logrotate.d/
新建:
vim /etc/logrotate.d/golang-app
内容示例:
/var/log/xxx.log {
daily
rotate 7
compress
missingok
notifempty
copytruncate
}
说明:
copytruncate:不重启服务也能截断日志(适合 Golang)compress:自动压缩旧日志rotate 7:保留 7 份测试:
logrotate -d /etc/logrotate.d/golang-app
很多 Golang 程序用:
journalctl -u your-service
清理:
# 只保留最近 7 天
journalctl --vacuum-time=7d
# 限制大小
journalctl --vacuum-size=500M
lumberjackimport "gopkg.in/natefinch/lumberjack.v2"
log.SetOutput(&lumberjack.Logger{
Filename: "/var/log/xxx.log",
MaxSize: 10, // MB
MaxBackups: 7,
MaxAge: 30, // days
Compress: true,
})
log.Println("hello")
然后用 journald 管理日志。
| 场景 | 做法 |
|---|---|
| 单个日志太大 | > logfile |
| 多历史日志 | find + mtime |
| 生产环境 | logrotate |
| systemd 服务 | journalctl |
| Golang 程序 | lumberjack |
如果你愿意,可以告诉我:
我可以直接帮你写 logrotate 配置或 Go 日志代码。