Python logging模块handlers用法详解

Alice
Alice
发布时间:2026-10-15 | 2人浏览过
原创

本文深入解析Python logging模块中handlers的核心用法,涵盖StreamHandler控制台输出、FileHandler文件记录及TimedRotatingFileHandler日志自动分割。详细讲解构造函数参数when、interval与backupCount的配置逻辑,结合完整代码示例演示如何自定义日志格式与级别,帮助开发者高效管理应用日志生命周期。

handlers概述

一、handlers是什么?

logging模块中包含的类

用来自定义日志对象的规则(比如:设置日志输出格式、等级等)

常用3个子类:StreamHandler、FileHandler、TimedRotatingFileHandler

handlers基础应用

二、handlers基础应用

StreamHandler控制台输出

2.1 StreamHandler 控制台输出日志


import logging

#创建一个logger日志对象
logger = logging.getLogger('test_logger')
logger.setLevel(logging.DEBUG)  #设置默认的日志级别

#创建日志格式对象
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

#创建StreamHandler对象
sh = logging.StreamHandler()
#StreamHandler对象自定义日志级别
sh.setLevel(logging.DEBUG)
#StreamHandler对象自定义日志格式
sh.setFormatter(formatter)

logger.addHandler(sh)  #logger日志对象加载StreamHandler对象
#日志输出
logger.info('newdream')

运行上述代码后,系统将在控制台终端打印出相应的日志信息。

FileHandler文件记录

2.2 FileHandler 日志输出到文件


import logging

#创建一个logger日志对象
logger = logging.getLogger('test_logger')
logger.setLevel(logging.DEBUG)  #设置默认的日志级别

#创建日志格式对象
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

#创建FileHandler对象
fh = logging.FileHandler('test.log')
#FileHandler对象自定义日志级别
fh.setLevel(logging.DEBUG)
#FileHandler对象自定义日志格式
fh.setFormatter(formatter)

logger.addHandler(fh)  #logger日志对象加载FileHandler对象
#日志输出
logger.info('newdream')

执行该段代码时,控制台将不再显示日志内容,而是自动在当前工作目录下生成一个名为test.log的文件,所有日志记录均写入该文件。

TimedRotatingFileHandler日志分割

2.3 TimedRotatingFileHandler 日志分割


import logging
from logging import handlers

#创建一个logger日志对象
logger = logging.getLogger('test_logger')
logger.setLevel(logging.DEBUG)  #设置默认的日志级别

#创建日志格式对象
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

#创建TimedRotatingFileHandler对象
rh = handlers.TimedRotatingFileHandler("test.log", when='S', interval=1, backupCount=5)
#TimedRotatingFileHandler对象自定义日志级别
rh.setLevel(logging.DEBUG)
#TimedRotatingFileHandler对象自定义日志级别
rh.suffix = "%Y_%m_%d_%H_%M_%S.log"
#TimedRotatingFileHandler对象自定义日志格式
rh.setFormatter(formatter)

logger.addHandler(rh)  #logger日志对象加载TimedRotatingFileHandler对象
#日志输出
logger.info('newdream')

运行此代码后,控制台无输出,程序会在当前目录创建一个以时间戳命名的日志文件(格式为test_年_月_日_时_分_秒.log)进行日志存储。

在实例化TimedRotatingFileHandler时,需遵循如下构造函数定义:

  • TimedRotatingFileHandler(filename [,when [,interval [,backupCount]]])
  • filename:指定输出日志文件名的前缀,例如log/myapp.log。
  • when:定义按何种时间单位进行切分,该参数接收特定的字符串值,可选值包括:

“S”: Seconds “M”: Minutes “H”: Hours “D”: Days “W”: Week day (0=Monday) “midnight”: Roll over at midnight

interval参数表示等待多少个when单位的时间后,Logger会自动重建新文件。新文件的命名由filename加上suffix组成。若新生成的文件名与已有文件重名,系统将自动覆盖旧文件,因此建议明确定义suffix以避免因when参数导致的文件名重复冲突。backupCount用于设定保留的日志文件数量。默认值为0,表示不自动删除任何日志。若设置为5,则在创建新文件时,库会检查现有日志数量,若超过5个,则从最早创建的日志开始删除,直至保留数量符合设定。

总结

三、小结

上述日志示例为了便于读者清晰操作和理解,将代码分开单独实现。

在2.3节中,若想验证是否达到5个日志后自动删除的效果,可以通过循环输出日志来实现,代码如下:

while True: logger.info('newdream')

三种handlers日志可以共同使用,它们都是独立的handler对象,但一般FileHandler和TimedRotatingFileHandler不会同时使用。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表