Python Logging 限制文件大小

简介: Python Logging 限制文件大小

Python Logging 限制文件大小
Python 的 logging 模块是一个强大的工具,用于记录和管理日志信息。在实际应用中,尤其是在长时间运行的程序中,日志文件可能会无限增大,从而导致存储资源不足或难以管理。为此,我们可以使用 RotatingFileHandler 或 TimedRotatingFileHandler 来限制日志文件的大小,确保日志管理的高效性。

使用 RotatingFileHandler 限制文件大小
RotatingFileHandler 简介
RotatingFileHandler 允许我们创建一个日志处理器,在达到指定文件大小时自动轮换日志文件。这样可以避免单个日志文件过大,同时保留一定数量的历史日志文件。

实例代码
下面是一个使用 RotatingFileHandler 的示例代码,其中限制日志文件大小为 1MB,并保留最多 5 个备份文件:

import logging
from logging.handlers import RotatingFileHandler

# 创建一个 logger 对象
logger = logging.getLogger("MyLogger")
logger.setLevel(logging.DEBUG)  # 设置日志级别为 DEBUG

# 创建一个 RotatingFileHandler,限制文件大小为 1 MB, 保留 5 个备份
handler = RotatingFileHandler(
    "my_log.log", maxBytes=1 * 1024 * 1024, backupCount=5
)
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)

# 将 handler 添加到 logger
logger.addHandler(handler)

# 测试日志输出
for i in range(10000):
    logger.debug(f"This is log message number {i}")

代码解释

  1. 导入模块:首先导入 logging 和 RotatingFileHandler。
  2. 创建 Logger:创建一个名为 MyLogger 的 logger 对象,并设置日志级别为 DEBUG。
  3. 配置 Handler:使用 RotatingFileHandler 创建一个日志处理器,设置最大文件大小为 1 MB(maxBytes=1 1024 1024),同时定义最多保留 5 个备份文件(backupCount=5)。
  4. 设置格式:定义日志的输出格式,包括时间、级别和消息内容。
  5. 添加 Handler:将处理器添加到 logger。
  6. 生成日志:通过循环生成大量日志信息,测试日志文件的轮换功能。
  7. 日志文件轮换
  8. 当 my_log.log 文件的大小达到 1 MB 时,RotatingFileHandler 会自动将当前日志文件重命名为 my_log.log.1,继而创建一个新的 my_log.log 文件来继续记录日志。若还有更早的日志文件,后续的文件依次递增编号,直到达到备份数量限制(在本例中为 5 个)。

使用 TimedRotatingFileHandler 按时间限制文件大小
如果你希望按时间周期来管理日志文件,可以使用 TimedRotatingFileHandler。该处理器允许根据设定的时间间隔(例如每小时、每天等)自动轮换日志文件。

实例代码
以下是一个使用 TimedRotatingFileHandler 的示例,设置每小时轮换一次日志文件:

import logging
from logging.handlers import TimedRotatingFileHandler

# 创建一个 logger 对象
logger = logging.getLogger("MyTimedLogger")
logger.setLevel(logging.DEBUG)  # 设置日志级别为 DEBUG

# 创建一个 TimedRotatingFileHandler,每小时轮换一次
handler = TimedRotatingFileHandler(
    "timed_log.log", when="H", interval=1, backupCount=3
)
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)

# 将 handler 添加到 logger
logger.addHandler(handler)

# 测试日志输出
for i in range(100):
    logger.debug(f"This is timed log message number {i}")

代码解释

  1. 导入模块:同样导入 logging 和 TimedRotatingFileHandler。
  2. 创建 Logger:创建一个名为 MyTimedLogger 的 logger 对象。
  3. 配置 Handler:使用 TimedRotatingFileHandler 创建一个日志处理器,设置每小时(when="H")轮换一次,并保留 3 个备份文件(backupCount=3)。
  4. 设置格式:与之前相同,定义日志输出格式。
  5. 添加 Handler:将处理器添加到 logger。
  6. 生成日志:生成一定数量的日志信息,以查看时间轮换效果。

总结
通过使用 Python 的 logging 模块及其 RotatingFileHandler 和 TimedRotatingFileHandler,我们可以有效管理日志文件的大小。这不仅有助于避免存储空间问题,还能保持日志的整洁和可读性。以上示例提供了基础的实现方式,可以根据需求进一步扩展和自定义日志功能。

相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
相关文章
|
云安全 人工智能 安全
重磅发布,阿里云安全大模型正式投入使用
2023年云栖大会,阿里云安全正式宣布基于通义千问大模型训练的安全大模型投入使用。首期开放的功能包括为用户提供定制化的安全告警解读、事件调查及处置建议服务,覆盖全网超过99%的告警事件类型。即日起,用户可在阿里云安全中心免费使用体验。
2631 4
重磅发布,阿里云安全大模型正式投入使用
|
Linux
linux yum 安装rar和unrar
linux yum 安装rar和unrar
1471 0
|
存储 安全 Python
[python]使用标准库logging实现多进程安全的日志模块
[python]使用标准库logging实现多进程安全的日志模块
862 1
|
11月前
|
SQL 数据可视化 JavaScript
嵌套式事项整合工具深度解析:任务、子任务、执行流的统一调度机制
在项目执行中,任务虽已完成,但常因缺乏结构化管理导致进度混乱、协作低效。嵌套式事项整合工具通过多级拆分、状态聚合与逻辑联结,帮助团队构建清晰的任务结构,提升执行效率与协同能力。
嵌套式事项整合工具深度解析:任务、子任务、执行流的统一调度机制
|
编译器 开发工具 C++
【Python】已解决error: Microsoft Visual C++ 14.0 or greater is required. Get it with “Microsoft C++ Build
【Python】已解决error: Microsoft Visual C++ 14.0 or greater is required. Get it with “Microsoft C++ Build
8748 0
|
Ubuntu 安全 网络协议
|
数据采集 存储 前端开发
豆瓣评分9.0!Python3网络爬虫开发实战,堪称教学典范!
今天我们所处的时代是信息化时代,是数据驱动的人工智能时代。在人工智能、物联网时代,万物互联和物理世界的全面数字化使得人工智能可以基于这些数据产生优质的决策,从而对人类的生产生活产生巨大价值。 在这个以数据驱动为特征的时代,数据是最基础的。数据既可以通过研发产品获得,也可以通过爬虫采集公开数据获得,因此爬虫技术在这个快速发展的时代就显得尤为重要,高端爬虫人才的收人也在逐年提高。
|
存储 缓存 算法
大文件 MD5 SHA 校验时间优化之路
【8月更文挑战第12天】处理大文件的MD5与SHA校验时,可通过选择高效算法实现、分块读取处理文件、利用多线程并行处理、采用硬件加速及缓存校验结果等方式优化校验时间。例如,使用性能良好的加密库如`pycryptodome`替代Python的标准`hashlib`库;分块读取文件并逐块计算哈希值,减少内存占用;利用多线程处理不同文件块;若条件允许,使用硬件加速如Intel AES-NI指令集;以及缓存重复校验的文件哈希值避免重算。这些策略可显著提高校验速度和系统效率。
2030 1
|
安全 测试技术 网络安全
目录扫描神器DirBuster用法
【8月更文挑战第6天】
1087 1
|
编解码 程序员 开发者
【Python】已解决:UnicodeDecodeError: ‘utf-8’ codec can’t decode byte 0xa1 in position 0: invalid start by
【Python】已解决:UnicodeDecodeError: ‘utf-8’ codec can’t decode byte 0xa1 in position 0: invalid start by
13025 0