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

您的位置: 首页 > 文章列表 > 编程开发 > Debian Golang日志如何设置自动清理策略

Debian Golang日志如何设置自动清理策略

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

扫一扫,手机访问

在Debian系统上跑Golang服务时,日志管理是个绕不开的话题——尤其是当日志文件无节制增长,最终把磁盘撑爆的时候。自动清理日志的策略,其实用`logrus`库就能优雅实现。下面是一个完整示例,直接上手就能用。 先安装`logrus`库(如果还没装的话): ```bash go get github.com/sirupsen/logrus ``` 然后创建一个`main.go`文件,把下面这段代码放进去。 ```go package main import ( "os" "time" "github.com/sirupsen/logrus" ) func main() { // 创建日志文件 logFile, err := os.OpenFile("logs/app.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666) if err != nil { logrus.Fatal(err) } defer logFile.Close() // 设置日志输出到文件 logrus.SetOutput(logFile) // 设置日志级别 logrus.SetLevel(logrus.InfoLevel) // 设置日志格式为文本格式(含时间戳) logrus.SetFormatter(&logrus.TextFormatter{ FullTimestamp: true, }) // 同时启用调用者信息 logrus.SetReportCaller(true) // 后续可以改为JSON格式 logrus.SetFormatter(&logrus.JSONFormatter{}) logrus.WithFields(logrus.Fields{ "app_name": "my_app", }).Info("Application started") // 设置最大备份数量(即保留的最新日志文件个数) maxBackupIndex := 3 // 每天执行一次清理 ticker := time.NewTicker(24 * time.Hour) go func() { for range ticker.C { logrus.Info("Cleaning up old log files...") cleanOldLogFiles(maxBackupIndex) } }() // 模拟应用持续运行 select {} } func cleanOldLogFiles(maxBackupIndex int) { // 读取日志目录 files, err := os.ReadDir("logs") if err != nil { logrus.Error(err) return } // 按修改时间排序(最旧的在前) logFiles := make([]os.FileInfo, len(files)) copy(logFiles, files) sort.Slice(logFiles, func(i, j int) bool { return logFiles[i].ModTime().Before(logFiles[j].ModTime()) }) // 删除超出备份数量的旧文件 for _, file := range logFiles[maxBackupIndex:] { err := os.Remove("logs/" + file.Name()) if err != nil { logrus.Error(err) } } } ``` 代码里做了几件事:创建日志文件`logs/app.log`,设置输出、级别、格式;启动一个协程,定时(每24小时)调用`cleanOldLogFiles`,读取`logs`目录下的所有文件,按修改时间排序后,保留最新的`maxBackupIndex`个文件,其余删除。 需要调整的话,直接改`maxBackupIndex`的值即可——比如想保留5个最新日志文件,就改成5;如果想更频繁地清理,把`ticker`的时间间隔改成`1*time.Hour`也行。整个过程不需要额外依赖,使用`logrus`自身的能力就能完成。简简单单,却非常实用。
本文转载于:https://www.yisu.com/ask/69688265.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注