在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作业中,以便定期运行。