商城首页欢迎来到中国正版软件门户

您的位置: 首页 > 文章列表 > 编程开发 > 如何设置CentOS下Golang日志轮转

如何设置CentOS下Golang日志轮转

  发布于2026-07-28 阅读(0)

扫一扫,手机访问

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

如何设置CentOS下Golang日志轮转

1. 安装logrotate

首先,得确认系统里有没有装这个工具。CentOS上一条命令搞定:

sudo yum install logrotate

装完之后,它就会定期自动跑起来,但前提是得有对应的配置文件。

2. 创建日志文件

假设你的Golang应用把日志写到了/var/log/myapp.log,这个路径可以自己定,但最好放在/var/log/下,规范一些。

3. 配置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:每天轮转一次,你也可以改成weeklymonthly,看日志量大小。
  • missingok:日志文件万一没了,也别报错,省得烦。
  • rotate 7:保留最近7份轮转后的文件,超出就删掉。
  • compress:轮转完把旧日志压缩成.gz,省空间。
  • notifempty:如果日志文件是空的,就别轮转了,没意义。
  • create 640 root root:轮转后创建新日志文件,权限640,属主和属组都是root。如果你的Golang应用不是以root运行,要调整属主,比如改成create 640 myapp myapp

4. 测试配置

配置写完了,先别急着等它自动跑,手动验证一下:

sudo logrotate -f /etc/logrotate.d/myapp

-f表示强制轮转,不管时间到了没。如果没报错,说明配置正确。

5. 自动化轮转

logrotate本身是个定时任务,默认由cron每天执行一次。你可以通过查看状态文件确认它是否正常运转:

cat /var/lib/logrotate/status

里面会记录每个日志文件上次轮转的时间。

6. 确保Golang应用程序使用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用户运行,日志文件的属主、属组和权限要匹配,否则写不进去。另外,logrotatecreate参数也要和这个保持一致,别让新文件创建后应用没权限写。

以上几步都走通了,Golang应用的日志轮转就算配置完毕。后续只需关注磁盘空间和轮转频率,必要时调整rotate的个数或时间间隔就行。

本文转载于:https://www.yisu.com/ask/16476828.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注