Python Logging 限制文件大小

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 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. 生成日志:通过循环生成大量日志信息,测试日志文件的轮换功能。

日志文件轮换
当 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,我们可以有效管理日志文件的大小。这不仅有助于避免存储空间问题,还能保持日志的整洁和可读性。以上示例提供了基础的实现方式,可以根据需求进一步扩展和自定义日志功能。

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
1月前
|
Python
Python 压缩PDF减小文件大小
【8月更文挑战第6天】介绍了三种用Python压缩PDF文件的方法:1) 使用`pdfcompressor`库,安装后可通过简单命令压缩文件;2) 利用`PyPDF2`库,需手动设置压缩参数;3) 采用`pdfsizeopt`库,一键优化PDF大小。各方法均提供示例代码,便于快速实现文件压缩。
195 0
|
30天前
|
存储 JSON 安全
python logging模块
python logging模块
|
1月前
|
存储 安全 Python
[python]使用标准库logging实现多进程安全的日志模块
[python]使用标准库logging实现多进程安全的日志模块
|
4月前
|
存储 监控 Python
python 检测文件大小并定期删除
python 检测文件大小并定期删除
38 1
|
Python
python-- logging 模块
python-- logging 模块
|
4月前
|
Python
python正确使用logging日志的方式
python正确使用logging日志的方式
85 0
|
4月前
|
开发者 Python
Python学习 -- logging模块
Python学习 -- logging模块
38 0
|
11月前
|
开发者 Python
Python学习 -- logging模块
Python学习 -- logging模块
51 0
|
编解码 运维 监控
Python日志logging实战教程
我们从一个简单的日志记录实战,一步一步实现了自定义日志格式、写日志文件、抽出公共日志模块让其他模块用、同时写多个日志文件并进行日志文件切割、通过配置文件实现日志参数的定义、解决日志中文显示问题。基本覆盖了真实应用场景日志的使用。
269 0