概述
- 在实际开发中,我们通常会将不同业务的日志进行分类存储,并分别设置存储上限;
- 我们动态剔除时间久远的日志,以保持有限的存储空间存储的都是最近期的日志;
- logging模块提供了RotatingFileHandler类帮我们实现上述功能;
import logging
from logging.handlers import RotatingFileHandler
# 获取全局日志对象并设置级别
logger = logging.getLogger(__name__)
logger.setLevel(level=logging.INFO)
# 创建日志格式对象
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
# 定义一个RotatingFileHandler,最多备份3个日志文件,每个日志文件最大1K
rHandler = RotatingFileHandler("./logs/log.txt", maxBytes=1 * 1024, backupCount=3)
console = logging.StreamHandler()
# 设置级别和格式
rHandler.setLevel(logging.INFO)
console.setLevel(logging.INFO)
rHandler.setFormatter(formatter)
console.setFormatter(formatter)
# 添加日志处理器
logger.addHandler(rHandler)
logger.addHandler(console)
# 模拟打印大量日志
# 最近的4K日志内容将分别被保存在log.txt,log.txt.1,log.txt.2,log.txt.3中
# 更早的内容将被近期的内容覆盖
for i in range(10):
logger.info("%d:Start print log" % (i))
logger.debug("%d:Do something" % (i))
logger.warning("%d:Something maybe fail." % (i))
logger.info("%d:Finish" % (i))
logger.error("%d:Error Occured!" % (i))
- 在这个例子中,单个文件的最大存储空间为1K,最多有3个备份;
- 即log.txt动态存储最新的1K日志内容,log.txt.1存储的是次新的1K内容,以此类推;
- log.txt外加3个早期的备份文件,4个文件,日志总容量为4K;
- 这4个文件,永远动态地保存着最新的4K日志内容;