发布于2026-07-28 阅读(0)
扫一扫,手机访问
在CentOS系统上跑Golang应用,日志管理是个绕不开的活儿。很多新手直接让程序自己写日志,结果几天不看,日志文件大到吓人,磁盘报警是常有的事。这时候就需要一个靠谱的日志轮转工具——logrotate,它天生就是干这个的,配置起来也不复杂。下面就来一步步说明,怎么把它和Golang应用的日志结合起来。

logrotate首先,得确认系统里有没有装这个工具。CentOS上一条命令搞定:
sudo yum install logrotate
装完之后,它就会定期自动跑起来,但前提是得有对应的配置文件。
假设你的Golang应用把日志写到了/var/log/myapp.log,这个路径可以自己定,但最好放在/var/log/下,规范一些。
logrotate配置文件一般放在/etc/logrotate.d/目录下,名字随便起,比如myapp。用文本编辑器新建一个:
sudo nano /etc/logrotate.d/myapp
然后填入以下内容:
/var/log/myapp.log {
daily
missingok
rotate 7
compress
notifempty
create 640 root root
}
每项参数的意思,简单说一下:
daily:每天轮转一次,你也可以改成weekly或monthly,看日志量大小。missingok:日志文件万一没了,也别报错,省得烦。rotate 7:保留最近7份轮转后的文件,超出就删掉。compress:轮转完把旧日志压缩成.gz,省空间。notifempty:如果日志文件是空的,就别轮转了,没意义。create 640 root root:轮转后创建新日志文件,权限640,属主和属组都是root。如果你的Golang应用不是以root运行,要调整属主,比如改成create 640 myapp myapp。配置写完了,先别急着等它自动跑,手动验证一下:
sudo logrotate -f /etc/logrotate.d/myapp
-f表示强制轮转,不管时间到了没。如果没报错,说明配置正确。
logrotate本身是个定时任务,默认由cron每天执行一次。你可以通过查看状态文件确认它是否正常运转:
cat /var/lib/logrotate/status
里面会记录每个日志文件上次轮转的时间。
log包最后一步,看看你的Golang代码里,日志是不是真的写到了我们指定的文件。标准库的log包配合os.OpenFile就能搞定,示例如下:
package main
import (
"log"
"os"
)
func main() {
logFile, err := os.OpenFile("/var/log/myapp.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
if err != nil {
log.Fatalf("error opening log file: %v", err)
}
defer logFile.Close()
log.SetOutput(logFile)
log.Println("This is a test log entry.")
}
注意权限问题:如果应用以非root用户运行,日志文件的属主、属组和权限要匹配,否则写不进去。另外,logrotate的create参数也要和这个保持一致,别让新文件创建后应用没权限写。
以上几步都走通了,Golang应用的日志轮转就算配置完毕。后续只需关注磁盘空间和轮转频率,必要时调整rotate的个数或时间间隔就行。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8