对于按日期滚动的文件处理程序,可以使用 TimedRotatingFileHandler
类。这类处理程序会在指定的时间间隔创建新的日志文件。下面是一个示例:
import logging
from logging.handlers import TimedRotatingFileHandler
# 创建 logger
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)
# 创建按日期滚动的文件处理程序,每天生成新文件
handler = TimedRotatingFileHandler('my_log_daily.log', when='midnight', interval=1, backupCount=5)
# 配置日志格式
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)
# 将处理程序添加到日志记录器
logger.addHandler(handler)
# 记录日志
logger.info('This is a log message')
# 关闭 logger(可选)
logger.removeHandler(handler)
在上面的例子中:
'my_log_daily.log'
是日志文件的基础名称。when='midnight'
表示每天午夜生成一个新的日志文件。interval=1
表示每天生成一个新文件。backupCount=5
表示保留最近的 5 个日志文件备份。
当日志文件达到一定大小时重新生成并保存,可以使用 maxBytes
参数,这个参数设置文件的最大字节数。当日志文件大小超过这个值时,将会生成新的日志文件。
handler = TimedRotatingFileHandler('my_log_daily.log', when='midnight', interval=1, backupCount=5, encoding='utf-8')
handler.addFilter(logging.Filter("my_logger")) # 添加过滤器
handler.setLevel(logging.DEBUG) # 设置级别
handler.setFormatter(logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')) # 设置格式
handler.setDelay(True) # 设置为True,将延迟初始化。直到运行`logger.debug`时,日志才会初始化。
logger.addHandler(handler)
logger.debug("这是一条 debug 级别的日志")