一、概述
logging位于Python标准库中,提供了灵活和易于扩展的日志记录框架。logging.level.root是Python logging模块中最常用的配置项之一。在一个Python程序中,只有一个根Logger实例,即logging.getLogger()的返回值。根Logger可以被任意数量的Handler、Filter、Formatter实例所关联,每个Handler、Filter、Formatter实例则用于实现不同的功能。logging.level.root参数配置,即是配置根Logger的日志级别。
二、日志级别
日志级别描述了日志记录的严重程度,Python logging模块定义了5个级别,以及一个最低级别NotSet:CRITICAL > ERROR > WARNING > INFO > DEBUG > NOTSET。不同级别的含义如下:
CRITICAL:导致应用程序停止运行的严重错误; ERROR :导致应用程序部分停止运行的错误; WARNING :发生潜在错误或异常情况; INFO :证明事情按预期工作; DEBUG :详细信息,通常用于调试; NOTSET :没有设置日志级别,使用父Logger的日志级别(缺省)。
当我们配置logging.level.root时,所有的logger都会以此为标准进行日志级别的设置。如果子Logger没有单独设置日志级别,那么它会继承其父Logger的日志级别。
三、logging.level.root配置
logging.level.root的默认值为WARNING。 意味着只有WARNING、ERROR、CRITICAL三个级别的日志才会输出。因此,如果要将所有级别的日志都输出到控制台,可以将logging.level.root的值设置为DEBUG,如下:
import logging logging.basicConfig(level=logging.DEBUG) logging.debug("debug: This is a debug message") logging.info("info: This is an info message") logging.warning("warning: This is a warning message") logging.error("error: This is an error message") logging.critical("critical: This is a critical message")
上述代码中,logging.basicConfig()中的level参数设置为DEBUG,表示所有级别的日志都会输出。根据日志级别的不同,输出如下:
debug: This is a debug message info: This is an info message warning: This is a warning message error: This is an error message critical: This is a critical message
四、logging.level.root与子Logger
除了rootLogger之外,程序也可以使用其他的Logger实例。一个Logger实例可以有一个或多个父Logger,多个父Logger之间用”.”进行分割。Logger实例打印日志时,会用自身的日志级别和所有父Logger的日志级别中的最大级别进行比较,从而确定这条日志是否会输出。
例如,如果实例logger1有3个父实例getRootLogger、parent1、parent2,日志级别分别设置为WARNING、INFO、DEBUG,那么logger1的日志级别就是DEBUG。这意味着在logger1打印日志时,如果日志级别大于等于DEBUG,那么这条日志就会输出。
五、logging.level.root与日志记录器
日志记录器,即定义了应用程序运行期间如何记录和格式化日志的类。Python的logging模块定义了三个记录器类,分别是:Logger、Filter和Handler。由于logging.level.root控制了所有的子Logger的日志级别,因此在设置日志记录器的时候,通常也要设置日志级别,以便根据不同的日志级别选择不同的Logger、Filter和Handler。
例如,下面的代码定义了一个名为”myLogger”的Logger实例,并设置了一个Handler和一个Formatter。此时,由于logging.level.root的默认值是WARNING,只有级别大于WARNING的日志才会被输出。
import logging import sys myLogger = logging.getLogger("myLogger") myLogger.setLevel(logging.DEBUG) handler = logging.StreamHandler(sys.stdout) handler.setLevel(logging.WARNING) formatter = logging.Formatter('%(levelname)s - %(asctime)s - %(message)s') handler.setFormatter(formatter) myLogger.addHandler(handler) myLogger.debug("This is a debug message") myLogger.error("This is an error message")
输出如下:
ERROR - 2021-08-10 10:39:28,020 - This is an error message
六、总结
logging.level.root是Python logging模块中非常重要的一个参数,它控制着所有Logger实例的日志级别。在应用程序运行期间,如果需要对日志进行更多的细分和控制,可以使用Logger、Filter和Handler这三个类进行更精细的配置。
原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/306628.html