温馨提示×

Linux服务器上Golang日志清理

小樊
57
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