在python的logging.handlers
模块中,提供了很多有用的日志处理程序对象,其中比较常用的有:RotatingFileHandler
、TimedRotatingFileHandler
。这两个处理程序主要是用来对输出的日志文件进行切割。
一、RotatingFileHandler 介绍
RotatingFileHandler
是 Python 自带的日志处理器之一,用于将日志写入到指定的文件中,并控制文件大小和数量,可实现日志轮转(即备份旧日志并创建新的日志)。
class logging.handlers.RotatingFileHandler(filename, mode='a', maxBytes=0, backupCount=0, encoding=None, delay=False)
RotatingFileHandler
的各参数解释:
filename
:文件名,指定日志文件的路径和名称;mode
:模式,可选值为 ‘a’ 或 ‘w’。当为 ‘a’ 时,表示以追加方式写入日志;当为 ‘w’ 时,表示以覆盖方式写入日志。默认值为 ‘a’;maxBytes
:单个日志文件的最大大小,单位为字节。当日志文件达到该大小时,会自动备份旧日志并创建新的日志文件。默认值为 0,表示不限制日志文件大小。;backupCount
:备份文件数目。当生成的日志文件数量超过该数目时,会自动删除旧的备份日志文件。默认值为 0,表示不备份;encoding
:日志文件的编码格式,默认为 None,表示使用系统默认编码;delay
:是否延时打开文件,可选值为 True 和 False。当为 True 时,表示延时打开文件,即在第一次写入日志时才打开日志文件。当为 False 时,表示在初始化时即打开日志文件。默认值为 False
默认情况下,文件无限增长。您可以指定maxBytes
和backupCount
的特定值,以允许文件以预定的大小滚动。
需要注意的是,如果指定了为maxBytes
指定了>0
的值,则mode
指定为w
是没有意义的,RotatingFileHandler
初始化时会自动将mode
强制改为a
示例1:
import logging
from logging.handlers import RotatingFileHandler
logger = logging.getLogger('mylogger')
logger.setLevel(logging.INFO)
handler = RotatingFileHandler(filename='test.log', maxBytes=6, backupCount=3)
logger.addHandler(handler)
for i in range(10):
logger.info("Hello%d" % i)
输出4个日志文件,文件名及文件内容分别如下:
# test.log
Hello9
# test.log.1
Hello8
# test.log.2
Hello7
# test.log.3
Hello6
解释:
- 文件最新内容始终输出在
test.log
基本日志文件中; test.log
大小达到设定的maxBytes
时,如果再有日志写入,则新生成一个test.log
,并将原来的test.log
重命名为test.log.1
,将原来的test.log.1
(如果有)重命名为test.log.2
,将原来的test.log.2
(如果有)重命名为test.log.3
,将原来的test.log.3
(如果有)删除(因为只备份3个)
二、TimedRotatingFileHandler 介绍
TimedRotatingFileHandler
是 Python 自带的日志处理器之一,与 RotatingFileHandler
类似,也用于将日志写入到指定的文件中,并对文件进行切割。不同的是TimedRotatingFileHandler
可以按照时间轮转日志,例如每天或每小时生成一个新的日志文件。
class logging.handlers.TimedRotatingFileHandler(filename, when='h', interval=1, backupC