四、Python日志系统之日志文件的备份和删除

import os
import datetime
import logging
from watchdog.events import FileSystemEventHandler
from watchdog.observers import Observer
"""实现代码中处理日志文件的备份和删除"""
class UserLog:def __init__(self):self.logger = logging.getLogger(__name__)self.logger.handlers = []  # 清空 handlers,防止重复添加self.logger.setLevel(logging.DEBUG)  # 测试环境# 创建日志文件夹base_dir = os.path.dirname(os.path.abspath(__file__))log_dir = os.path.join(base_dir, "logs")if not os.path.exists(log_dir):os.makedirs(log_dir)# 日志文件名log_file = datetime.datetime.now().strftime("%Y-%m-%d") + ".log"self.log_name = os.path.join(log_dir, log_file)# 文件输出日志self.file_handle = logging.handlers.RotatingFileHandler(self.log_name, maxBytes=10000, backupCount=5)self.file_handle.setLevel(logging.ERROR)# 日志格式formatter = logging.Formatter('%(asctime)s %(filename)s --> %(funcName)s %(levelno)s: %(levelname)s -----> %(message)s')self.file_handle.setFormatter(formatter)self.logger.addHandler(self.file_handle)# 启动日志文件变化监控self.start_file_monitor()def start_file_monitor(self):observer = Observer()observer.schedule(LogFileHandler(self.log_name), os.path.dirname(self.log_name))observer.start()print(f"Started monitoring {self.log_name} for changes...")def get_log(self):return self.loggerdef close_handle(self):self.logger.removeHandler(self.file_handle)self.file_handle.close()def handle_backup_and_deletion(self):"""处理日志文件的备份和删除"""log_files = [f for f in os.listdir(os.path.dirname(self.log_name)) if f.endswith(".log")]# 获取当前日志文件夹中所有以.log 结尾的文件列表log_files.sort()# 对获取到的日志文件列表按文件名进行排序,确保处理顺序# 备份超过指定数量的旧日志文件if len(log_files) > self.file_handle.backupCount:# 如果当前日志文件数量超过设置的备份数量for file_to_backup in log_files[:len(log_files) - self.file_handle.backupCount]:# 对于超出备份数量的旧文件进行处理backup_path = os.path.join(os.path.dirname(self.log_name), f"backup_{file_to_backup}")# 确定备份文件的路径,文件名前面添加"backup_"os.rename(os.path.join(os.path.dirname(self.log_name), file_to_backup), backup_path)# 将旧文件重命名为备份文件# 删除备份时间过长的日志文件(示例:超过 7 天)current_time = datetime.datetime.now()# 获取当前时间for backup_file in os.listdir(os.path.dirname(self.log_name)):# 遍历文件夹中的所有文件if backup_file.startswith("backup_") and (current_time - datetime.datetime.fromtimestamp(os.path.getmtime(os.path.join(os.path.dirname(self.log_name), backup_file)))) > datetime.timedelta(days=7):# 如果文件以"backup_"开头,并且其修改时间超过 7 天os.remove(os.path.join(os.path.dirname(self.log_name), backup_file))# 删除该备份文件class LogFileHandler(FileSystemEventHandler):def __init__(self, log_file):self.log_file = log_fileself.error_lines = set()  # 用于存储已经打印过的包含"ERROR"的行def on_modified(self, event):if event.src_path == self.log_file and event.event_type == 'odified':with open(self.log_file, 'r') as f:lines = f.readlines()for line in lines:if "ERROR" in line and line not in self.error_lines:  # 检查是否已经打印过print(f"Error found in log: {line.strip()}")self.error_lines.add(line)  # 将该行添加到已打印集合

在上述代码中,添加了 handle_backup_and_deletion 方法来处理日志文件的备份和删除。
对于备份,当当前的日志文件数量超过 RotatingFileHandler 中设置的 backupCount 时,将最早的日志文件进行备份。
对于删除,这里示例为删除超过 7 天的备份日志文件,可以根据实际需求调整时间阈值和删除条件。

首先,通过 os.listdir 获取日志文件夹中的所有 .log 文件,并对其进行排序。
然后,检查文件数量是否超过设置的备份数量。如果超过,就从最早的文件开始进行备份,通过重命名的方式将其转换为备份文件。
接下来,获取当前时间,并再次遍历文件夹中的文件。对于以 backup_ 开头且修改时间超过 7 天的备份文件,使用 os.remove 进行删除,以释放存储空间并保持备份的整洁。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/43483.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

简述 Kamailio 的多租户

如题,大家猜下我会怎么写 过几天公布答案 首先,是认证表 如果单租户, insert into subscriber(username, password) values (1000, 1234),这样就行 多租户则不然, insert into subscriber(username, domain, password) values (1000, abc.…

WebGIS面试题

文章目录 1. 前端1.1. 选择器的优先级1.2. CSS 中它的布局有哪些?1.3. CSS3 的新特性1.4. CSS 的两种盒子模型1.5. CSS 的伪元素选择器和伪类选择器有哪些?1.6. ES6 的新特性1.7. 谈谈你对 promise 的理解1.8. 简单说一下原型链1.9. 简单说一下深浅拷贝1…

CPLD编程注意事项

1、CPLD体积小,如果仅仅是完成简单的触发等时序,完全可以采用CPLD这类器件。 2、CPLD资源相当少,一般逻辑资源如上图,才160,稍微不注意,就会超标,所以,寄存器输入一定要尽量减少&…

算法小练之 位运算基础

前言 今天正式走入,位运算这个章节,关于这一部分我会先介绍几个重要的知识点,然后再根据几个力扣上的题来讲解。 了解6种位操作 总所周知,变量在计算机中都是二进制存储的,比如一个变量int a 1; 它的存…

nvidia driver和cuda版本较低,ubuntu系统更新nvidia驱动的方法(对于小白最快最最保险的方法)

问题描述: 系统:ubuntu22.04LTS 这两天安装另一个低版本的pytorch环境,提示我的cuda版本很旧,然后运行程序时候甚至直接报错,如下所示: .local/lib/python3.10/site-packages/torch/cuda/__init__.py&quo…

高通开发系列 - 使用QFIL工具单刷某个镜像文件

By: fulinux E-mail: fulinux@sina.com Blog: https://blog.csdn.net/fulinus 喜欢的盆友欢迎点赞和订阅! 你的喜欢就是我写作的动力! 返回:专栏总目录 目录 背景过程记录背景 有时候设备中刷的是user版本,无法使用fastboot刷单个镜像,这个时候该怎么办呢? 要解决在user…

Linux 一键部署Mysql 8.4.1 LTS

mysql 前言 MySQL 是一个基于 SQL(Structured Query Language)的数据库系统,SQL 是一种用于访问和管理数据库的标准语言。MySQL 以其高性能、稳定性和易用性而闻名,它被广泛应用于各种场景,包括: Web 应用程序:许多动态网站和内容管理系统(如 WordPress)使用 MySQL 存…

Python从0到100(三十五):beautifulsoup的学习

前言: 零基础学Python:Python从0到100最新最全教程。 想做这件事情很久了,这次我更新了自己所写过的所有博客,汇集成了Python从0到100,共一百节课,帮助大家一个月时间里从零基础到学习Python基础语法、Pyth…

【网络安全科普】网络安全指南请查收

随着社会信息化深入发展,互联网对人类文明进步奖发挥更大的促进作用。但与此同时,互联网领域的问题也日益凸显。网络犯罪、网络监听、网络攻击等是又发生,网络安全与每个人都息息相关,下面,一起来了解网络安全知识吧。…

上海市计算机学会竞赛平台2023年1月月赛丙组新年灯会

题目描述 新春佳节之际,路上挂起了一排喜气洋洋的大红灯笼,从左至右编号分别为1,2,...,𝑛1,2,...,n。但小爱发现,目前有𝑝p个灯笼不亮了,很是影响美观。 请你帮助小爱计算,最少修复多少个灯笼…

锐捷统一上网行为管理与审计系统static_convert接口远程命令执行漏洞复现 [附POC]

文章目录 锐捷统一上网行为管理与审计系统static_convert接口远程命令执行漏洞复现 [附POC]0x01 前言0x02 漏洞描述0x03 影响版本0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现 锐捷统一上网行为管理与审计系统static_convert接口远程命令执行漏洞复现 [附POC] 0x…

如何快速将Excel定义的表结构转换为MySQL的建表语句

目录 引言 方法一:使用Python编程 步骤一:安装必要的库 步骤二:读取Excel文件 步骤三:编写函数生成建表语句 注意事项 方法二:使用Excel VBA 步骤一:启用VBA编辑器 步骤二:编写VBA代码…

共筑智能未来 | 思腾合力闪耀2024世界人工智能大会(WAIC 2024)

在刚刚结束的2024世界人工智能大会暨人工智能全球治理高级别会议(WAIC 2024)上,思腾合力作为行业领先的人工智能基础架构解决方案提供商,凭借卓越的产品和解决方案,成为展会上的亮点之一。此次盛会不仅展示了全球人工智…

基于现有Docker镜像构建新的Docker镜像

1.拉取ubuntu 22.04的系统镜像 docker pull ubuntu:22.04 拉取成功后在DockerDesktop中可发现该镜像 2.启动刚才接取的ubuntu镜像 docker run --name Ubuntu22.04 -it -d -p 22:22 -p 80:80 -p 443:443 340d9b015b194dc6e2a13938944e0d016e57b9679963fdeb9ce021daac430221 启…

使用 Vue.js 和 Element Plus 实现自动完成搜索功能

使用 Vue.js 和 Element Plus 实现自动完成搜索功能 一、前言1.环境准备2.组件配置3.后端数据请求4.样式5.总结 一、前言 在前端开发中,实现自动完成(autocomplete)功能可以极大地提升用户体验,特别是在需要用户输入和选择内容的…

Nignx配置

Nginx配置之nginx.conf文件解析及配置 1、nginx.conf文件解析 user www-data; worker_processes auto; pid /run/nginx.pid; include /etc/nginx/modules-enabled/*.conf;events {worker_connections 768;# multi_accept on; }http {### Basic Settings###开启文件的高效传输…

中国股市的价值投资

(1)大盘之外 上周五传的最热的就是央行到二级市场抛国债,以便让长期国债收益率保住。 按理说,保住房子资产就能保住汇率。 如果保不住房子资产价格,那么只能强单保汇率了。有感央行下场调节国债:存款利率-国…

邦芒攻略:三大技能助推职场成功

即将毕业的大学生们可能都在盘算职业生涯。工作中需要的专业知识当然要掌握,不过想脱颖而出成就长期稳定的事业,还要具备一些重要素质。传统教科书里并没提及,但卓越员工跟好员工经常有三点区别: 1、呈现真实的自己 记住表现出真…

SAP_MMABAP模块_MM60物料清单通过增强新增物料描述

业务背景: 用户需要在系统标准的物料主数据查询报表MM60中,添加物料组描述,一直以来,我都觉得标准的MM60显示的内容字段不够多,不太好用。 以往都是给用户新开发一个物料主数据查询报表来解决的,但是这次刚…

SpringSecurity 三更草堂学习笔记

0.简介 Spring Security是Spring家族中的一个安全管理框架。相比与另外一个安全框架Shiro,它提供了更丰富的功能,社区资源也比Shiro丰富。 一般来说中大型的项目都是使用SpringSecurity来做安全框架。小项目有Shiro的比较多,因为相比与Spring…