一、概述
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/zh-tw/n/306628.html