温馨提示×

Linux服务器上Golang日志清理

小樊
43
2025-06-07 22:36:11
栏目: 云计算

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

0