1、获取根日志记录器
调用无参的 logging.getLogger() 函数或访问 logging.root 属性即可获取根日志记录器实例。
import logginglogging.getLogger()logging.root
2、自定义日志记录器
可以使用 logging.getLogger() 函数创建或获取一个日志记录器对象,支持模块化、分层管理日志。例如:
logging.getLogger("app"):父记录器;
logging.getLogger("app.module") :子记录器。
子记录器会继承父记录器的配置(如日志级别和处理器)。
import logginglogger = logging.getLogger(__name__) # 获取模块级日志记录器sup_logger = logging.getLogger("app") # 获取父记录器sub_logger = logging.getLogger("app.module") # 获取子记录器(继承父配置)
3、日志记录器的日志级别
(1)什么是日志级别(日志分级)
日志级别(Log Level)是用来区分日志消息的重要性和紧急性的。不同的日志级别可以帮助开发者快速定位问题,同时也便于对日志进行管理,例如只显示警告(WARNING)和错误(ERROR)级别的日志,而不显示调试(DEBUG)级别的日志。
(2)获取日志记录器的日志级别
可以使用日志记录器的 getEffectiveLevel() 方法来获取日志记录器的日志级别。这个方法返回的是当前日志记录器有效的日志级别,它会考虑所有父记录器的级别,直到找到一个非默认的级别。


日志记录器的 setLevel() 方法可以直接进行日志级别设置,该方法使用 logging 模块中定义的常量作为参数,包括:logging.DEBUG、logging.INFO、logging.WARNING、logging.ERROR 和logging.CRITICAL。

(三)获取日志处理器
1、什么是日志处理器
日志处理器(Handler) 是负责将日志记录发送到指定目标(如控制台、文件、网络等)的核心组件。日志记录器(Logger) 负责生成日志事件,而 日志处理器(Handler)负责决定这些事件“去哪里”以及“如何输出”。
2、常用内置日志处理器
logging 模块和 logging.handlers 中包含了的常用内置日志处理器:
logging.StreamHandler:输出到控制台(stdout/stderr);
logging.FileHandler:输出到普通文件;
logging.handlers.RotatingFileHandler :按文件大小轮转日志文件。当前文件达到最大字节数(maxBytes)时,关闭旧文件并重命名,创建新文件;
logging.handlers.TimedRotatingFileHandler:按时间轮转日志文件。可设定轮转时间和间隔数等时间参数。
【小编提示】 日志轮转(Logrotate) 是防止日志文件无限增长、占满磁盘空间的关键机制。它通过重命名、压缩、删除旧日志并创建新日志文件,确保系统稳定运行。 |
3、日志处理器日志级别
每个日志处理器都有一个与之关联的日志级别,用于决定哪些日志记录将被该日志处理器处理。
日志记录器和日志处理器都包括日志级别,两者共同作用决定日志是否输出,相关区别和逻辑如下:
Logger 日志级别(入口阈值):作为第一道关卡,负责初步筛选。若日志消息级别低于 Logger 设置,直接丢弃,不再后续处理 ;
Handler 日志级别(出口阈值):作为第二道关卡,针对通过 Logger 筛选的消息进行二次过滤。不同 Handler 可设置不同级别,实现同一日志源向不同目的地输出不同级别日志(如控制台仅显示 ERROR,文件记录 DEBUG)。
4、创建日志处理器
常用日志处理器的创建方式示例如下:
import loggingimport logging.handlers# 创建 StreamHandler 日志处理器并设定日志级别sh = logging.StreamHandler()sh.setLevel(logging.DEBUG)# 创建 FileHandler 日志处理器并设定日志级别fh = logging.FileHandler('log.txt')fh.setLevel(logging.ERROR)# 创建 RotatingFileHandler 日志处理器并设定日志级别,日志文件最大字节数 2000,保留 5 个备份文件rfh = logging.handlers.RotatingFileHandler('app.log', maxBytes=2000, backupCount=5)rfh.setLevel(logging.INFO)# 创建 TimedRotatingFileHandler 日志处理器并设定日志级别,日志文件轮转时间为每天午夜,每小时轮转 1 次,保留 365 个备份文件trf = logging.handlers.TimedRotatingFileHandler('mylog.log', when='midnight', interval=1, backupCount=365)trf.setLevel(logging.INFO)
受文章篇幅所限,下文将继续介绍 Python 日志处理的相关知识。