当前位置: 首页 > news >正文

使用Go语言实现自动清理应用系统日志

在服务器上部署业务应用系统,每天都会产生大量的日志,随着时间的推移,日志越积累越多,占用了大量的磁盘空间,除了可以手动清理日志外,还可以通过程序实现自动清理日志。

之所以选择Go语言,是因为用Go写的代码可以直接编译成二进制可执行程序,不需要在服务器额外安装运行环境,相当于编译好的Go代码,直接丢到服务器就能执行。

全部代码如下:

//代码整体逻辑:每月第一天,自动清理上个月的日志文件
package main

import (
	"fmt"
	"io"
	"os"
	"path/filepath"
	"time"
)

func main() {

    //日志文件夹路径
	var dirPath string = `C:\phpstudy_pro\WWW\notepad\runtime\log\` + getTime()
	flag, _ := dirIsEmpty(dirPath)
	if !flag {
		deleteFiles(dirPath)
	}
	delDir(dirPath)

}
//获取当前月的上一月的年月信息
func getTime() string {
	now := time.Now()
	lastYearAndMonth := now.AddDate(0, -1, 0).Format("200601")
	currentMonth := now.Month()
	if currentMonth == time.January {
		lastYear := now.Year() - 1
		lastYearAndMonth = time.Date(lastYear, time.December, 1, 0, 0, 0, 0, time.Local).Format("200601")

	}
	return lastYearAndMonth
}
//删除文件夹
func delDir(dirPath string) {
	_, err := os.Stat(dirPath)

	if !os.IsNotExist(err) {
		err = os.Remove(dirPath)
		if err == nil {
			fmt.Println("文件夹删除成功", dirPath)
		} else {
			fmt.Println("文件夹删除失败", dirPath)
		}
	} else {
		fmt.Println("文件夹不存在", dirPath)
	}
}
//判断文件夹是否有文件
func dirIsEmpty(path string) (bool, error) {
	f, err := os.Open(path)
	if err != nil {
		return false, err
	}
	defer f.Close()

	_, err = f.Readdir(1)
	if err == io.EOF {
		return true, nil // 文件夹为空
	}
	return false, err // 文件夹不为空或错误
}
//删除文件
func deleteFiles(path string) error {
	d, err := os.Open(path)
	if err != nil {
		return err
	}
	defer d.Close()

	files, err := d.Readdir(-1)
	if err != nil {
		return err
	}

	for _, file := range files {
		filename := filepath.Join(path, file.Name())

		err = os.Remove(filename) // 删除文件
		if err != nil {
			fmt.Println("Error deleting file: ", err)
		}

	}
	return nil
}

因为使用的服务器是Windows Server,所以将上面的Go代码编译成exe文件后加入到Windows系统里的计划任务里,设置每月第一天执行一次。

相关文章:

  • WP最主题专业的wordpress主题开发
  • 24体育NBA足球直播M24模板自适应板源码
  • Python - 爬虫-网页抓取数据-库requests
  • Docker 是什么? Docker 基本观念介绍与容器和虚拟机的比较
  • 迟滞模式控制的学习
  • 车辆北斗GPS双模定位管理系统 车载定位终端
  • 【学习笔记】CPU 的“超线程”是什么?
  • Opencv计算机视觉编程攻略-第十三节 跟踪视频中的物品
  • 基于 Python 卷积神经网络的新闻文本分类系统,附源码
  • Zookeeper的通知机制是什么?
  • 高并发环境下超发现象的详细分析,包含场景示例、影响分析及解决方案(悲观锁、乐观锁、分布式锁)
  • 实践 DevOps 项目:使用 Terraform、Helm、SonarQube 和 GitLab CI/CD 在 AWS EKS 上实践全栈部署
  • 深入理解 HTML5 Audio:网页音频播放的新时代
  • VMware Workstation/Player 的详细安装使用指南
  • zabbix和prometheus选择那个监控呢
  • 【Vue #2】脚手架 指令
  • 【Java学习】之AI时代下,Java工程师如何修炼
  • 【杂项】常见的坐标系及其使用方法
  • Python 深度学习实战 第一章 什么是深度学习代码示例
  • SpringCloud微服务: 分布式架构实战