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

python 日志自动最大10mb的写法

python 日志自动最大10mb的写法

#===============改进成最大大小的日志: import logging as logging1
import os
import os.path
import logging as logging1
class SizeLimitedFileHandler(logging1.FileHandler):"""自定义日志处理器:当日志文件超过指定大小,自动清空后重新写入"""def __init__(self, filename, max_size=10*1024*1024, mode='a+', encoding='utf-8'):""":param filename: 日志文件名:param max_size: 日志文件最大字节数(默认10MB):param mode: 写入模式:param encoding: 编码格式"""self.max_size = max_sizesuper().__init__(filename, mode=mode, encoding=encoding)def emit(self, record):"""重写emit方法,写入前检查文件大小"""# 检查文件是否存在且超过最大大小if os.path.exists(self.baseFilename) and os.path.getsize(self.baseFilename) > self.max_size:# 清空文件内容(以w模式打开再关闭)with open(self.baseFilename, 'w', encoding=self.encoding):pass# 重置文件指针self.stream = self._open()# 执行原始的日志写入逻辑super().emit(record)# 配置日志(自动清空版)
def setup_clear_logger(max_size=10*1024*1024):  # 默认10MB"""配置日志:超过指定大小自动清空:param max_size: 日志文件最大字节数(例如:10*1024*1024 = 10MB)"""# 1. 创建日志器logger = logging1.getLogger()logger.setLevel(logging1.INFO)logger.handlers.clear()  # 清空默认处理器# 2. 配置日志格式(保留你的原有格式)formatter = logging1.Formatter('%(asctime)s %(name)s [%(pathname)s line:%(lineno)d] %(levelname)s %(message)s',datefmt='%Y-%m-%d %H:%M:%S')# 3. 使用自定义的大小限制处理器(自动清空)file_handler = SizeLimitedFileHandler(filename='log.txt',max_size=max_size,  # 设置最大大小mode='a+',encoding='utf-8')file_handler.setFormatter(formatter)logger.addHandler(file_handler)# 4. 禁用指定模块的INFO日志logging1.getLogger('httpx').setLevel(logging1.WARNING)logging1.getLogger('openai').setLevel(logging1.WARNING)# 初始化日志(设置最大大小为10MB,超过则清空)
# 如果想按行数估算:1万行≈1MB(按每行100字节),则10万行≈10MB
setup_clear_logger(max_size=10*1024*1024)  # 10MBlogging1.info('这是一条info日志')