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

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

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

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

全部代码如下:

//代码整体逻辑:每月第一天,自动清理上个月的日志文件
package mainimport ("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() - 1lastYearAndMonth = 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系统里的计划任务里,设置每月第一天执行一次。


http://www.mrgr.cn/news/97924.html

相关文章:

  • 【Linux】网络编程
  • 2025ArkTS基础UI(一)——Column、Row、Text、Button组件
  • YOLO 8 入坑(持续更新)
  • wsl2+ubuntu22.04安装blenderproc教程
  • 蓝桥杯刷题--宝石组合
  • Kubernetes 入门篇之网络插件 calico 部署与安装
  • [leetcode]01背包问题
  • opencv人脸性别年龄检测
  • SD + Contronet,扩散模型V1.5+约束条件后续优化:保存Canny边缘图,便于视觉理解——stable diffusion项目学习笔记
  • MCU的USB接口作为 USB CDC串口输出
  • matlibplot的交互式demo
  • RocketMQ和kafka 的区别
  • 【图书管理系统】深入解析基于 MyBatis 数据持久化操作:全栈开发图书管理系统:查询图书属性接口(注解实现)、修改图书属性接口(XML 实现)
  • 用最简单的方式讲述离散傅里叶级数(DFS)以及离散傅立叶变换(DFT)
  • 微服务多模块构建feign项目过程与一些报错(2025详细版)
  • 蓝桥杯 C/C++ 组历届真题合集速刷(一)
  • SmolVLM2: The Smollest Video Model Ever(三)
  • 【数据结构 · 初阶】- 单链表
  • mysql-锁的算法(记录锁、间隙锁、临键锁)
  • LeetCode算法题(Go语言实现)_38