温馨提示×

debian golang日志怎么清空

小樊
46
2026-09-04 01:49:20
栏目: 编程语言

在 Debian 上,“golang 日志怎么清空”通常分两种场景:程序自己写的日志文件systemd / 服务管理的日志。下面按常见情况给你说明。


一、如果是 Golang 程序自己写的日志文件(如 log.txt)

1️⃣ 直接清空文件(最常用)

> /path/to/your/logfile.log

truncate -s 0 /path/to/your/logfile.log

✅ 不会删除文件
✅ 程序继续写日志(文件 inode 不变)


2️⃣ 用 cat /dev/null

cat /dev/null > /path/to/your/logfile.log

3️⃣ 删除后再让程序重建(不推荐)

rm /path/to/your/logfile.log

⚠️ 如果程序没用 O_APPEND 或没重新打开文件,可能会丢失日志写入能力。


二、如果是用 systemd 运行的 Golang 服务(journalctl)

查看日志

journalctl -u your-service.service

清空某个服务的日志

sudo journalctl --vacuum-time=1s -u your-service.service

或直接清空全部 journal 日志:

sudo journalctl --vacuum-size=1B

⚠️ journal 日志不能直接“清空文件”,只能按时间 / 大小裁剪。


三、更推荐的做法(生产环境)

✅ 使用 log rotate(Debian 自带)

示例 /etc/logrotate.d/mygolang

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

copytruncate 很关键:

  • 不清空 inode
  • Golang 程序无需重启

四、Golang 代码层面建议

如果你是自己写日志:

  • logrotate
  • 或用 lumberjack 自动切割日志
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

如果你能贴一下:

  • 日志是写到哪里的
  • 是 systemd 还是 nohup / supervisor

我可以给你更精确的方法。

0