在Linux服务器上,使用Golang编写的应用程序可能会产生大量日志文件。为了防止磁盘空间被耗尽,需要定期清理这些日志文件。以下是一个简单的示例,展示了如何使用Golang编写一个日志清理程序。
首先,我们需要导入必要的包:
package main
import (
"fmt"
"io/ioutil"
"os"
"path/filepath"
"sort"
"time"
)
接下来,我们定义一个函数来获取指定目录下的所有日志文件,并按照修改时间排序:
func getLogFiles(logDir string) ([]os.FileInfo, error) {
files, err := ioutil.ReadDir(logDir)
if err != nil {
return nil, err
}
var logFiles []os.FileInfo
for _, file := range files {
if filepath.Ext(file.Name()) == ".log" {
logFiles = append(logFiles, file)
}
}
sort.Slice(logFiles, func(i, j int) bool {
return logFiles[i].ModTime().Before(logFiles[j].ModTime())
})
return logFiles, nil
}
现在,我们定义一个函数来删除指定数量的旧日志文件:
func deleteOldLogFiles(logDir string, maxFiles int) error {
logFiles, err := getLogFiles(logDir)
if err != nil {
return err
}
if len(logFiles) <= maxFiles {
fmt.Println("No old log files to delete.")
return nil
}
for _, file := range logFiles[:len(logFiles)-maxFiles] {
err := os.Remove(filepath.Join(logDir, file.Name()))
if err != nil {
return fmt.Errorf("failed to delete file %s: %v", file.Name(), err)
}
fmt.Printf("Deleted old log file: %s\n", file.Name())
}
return nil
}
最后,在main函数中调用deleteOldLogFiles函数来删除指定数量的旧日志文件:
func main() {
logDir := "/path/to/your/log/directory"
maxFiles := 10
err := deleteOldLogFiles(logDir, maxFiles)
if err != nil {
fmt.Printf("Error deleting old log files: %v\n", err)
os.Exit(1)
}
}
将上述代码保存为log_cleanup.go,然后在终端中运行以下命令来编译并运行程序:
go build log_cleanup.go
sudo ./log_cleanup
注意:根据实际情况修改logDir变量,将其设置为你的日志文件所在的目录。另外,你可以根据需要调整maxFiles变量的值,以指定要保留的最新日志文件数量。
这个示例程序将删除指定目录下的旧日志文件,只保留最新的maxFiles个文件。你可以将此程序添加到cron作业中,以便定期运行。