天天看點

python3從零學習-5.6.4、日志标準庫logging源代碼: Lib/logging/__init__.py  

源代碼: Lib/logging/__init__.py

class logging.Logger

    propagate         如果這個屬性為真,記錄到這個記錄器的事件将會傳遞給這個進階别管理器的記錄器(原型),此外任何關聯到這個記錄器的管理器。消息會直接傳遞給原型記錄器的管理器 - 既不是這個原型記錄器的級别也不是過濾器是在考慮的問題。         如果等于假,記錄消息将不會傳遞給這個原型記錄器的管理器。         構造器将這個屬性初始化為 True。         setLevel(level)         給 logger 設定門檻值為 level 。日志等級小于 level 會被忽略。嚴重性為 level 或更高的日志消息将由該 logger 的任何一個或多個 handler 發出,除非将處理程式的級别設定為比 level 更高的級别。         建立一個 logger 時,設定級别為 NOTSET (當 logger 是根 logger 時,将處理所有消息;當 logger 是非根 logger 時,所有消息會委派給父級)。注意根 logger 建立時使用的是 WARNING 級别。         委派給父級的意思是如果一個記錄器的級别設定為NOTSET,周遊其祖先記錄器鍊,直到找到另一個NOTSET級别的祖先或到達根為止。         如果發現某個父級的級别 不是NOTSET ,那麼該父級的級别将被視為發起搜尋的記錄器的有效級别,并用于确定如何處理日志事件。         如果到達根 logger ,并且其級别為NOTSET,則将處理所有消息。否則,将使用根記錄器的級别作為有效級别。         isEnabledFor(lvl)         Indicates if a message of severity lvl would be processed by this logger. This method checks first the module-level level set by logging.disable(lvl) and then the logger’s effective level as determined by getEffectiveLevel().         getEffectiveLevel()         訓示此記錄器的有效級别。如果通過 setLevel() 設定了除 NOTSET 以外的值,則傳回該值。否則,将層次結構周遊到根,直到找到除 NOTSET 以外的其他值,然後傳回該值。傳回的值是一個整數,通常為 logging.DEBUG、 logging.INFO 等等。         getChild(suffix)         傳回由字尾确定的,是該記錄器的後代的記錄器。 是以,logging.getLogger('abc').getChild('def.ghi') 與 logging.getLogger('abc.def.ghi') 将傳回相同的記錄器。 這是一個便捷方法,當使用如 __name__ 而不是字元串字面值命名父記錄器時很有用。         debug(msg, *args, **kwargs)         Logs a message with level DEBUG on this logger. The msg is the message format string, and the args are the arguments which are merged into msg using the string formatting operator. (Note that this means that you can use keywords in the format string, together with a single dictionary argument.)         info(msg, *args, **kwargs)         在此記錄器上記錄 INFO 級别的消息。參數解釋同 debug()。         warning(msg, *args, **kwargs)         在此記錄器上記錄 WARNING 級别的消息。參數解釋同 debug()。         error(msg, *args, **kwargs)         在此記錄器上記錄 ERROR 級别的消息。參數解釋同 debug()。         critical(msg, *args, **kwargs)         在此記錄器上記錄 CRITICAL 級别的消息。參數解釋同 debug()。         log(lvl, msg, *args, **kwargs)         Logs a message with integer level lvl on this logger. The other arguments are interpreted as for debug().         exception(msg, *args, **kwargs)         在此記錄器上記錄 ERROR 級别的消息。參數解釋同 debug()。異常資訊将添加到日志消息中。僅應從異常處理程式中調用此方法。         addFilter(filter)         将指定的過濾器 filter 添加到此記錄器。         removeFilter(filter)         從此記錄器中删除指定的處理程式 filter。         filter(record)         Applies this logger’s filters to the record and returns a true value if the record is to be processed. The filters are consulted in turn, until one of them returns a false value. If none of them return a false value, the record will be processed (passed to handlers). If one returns a false value, no further processing of the record occurs.         addHandler(hdlr)         将指定的處理程式 hdlr 添加到此記錄器。         removeHandler(hdlr)         從此記錄器中删除指定的處理器 hdlr。         findCaller(stack_info=False)         查找調用源的檔案名和行号,以 檔案名,行号,函數名稱和堆棧資訊 4元素元組的形式傳回。堆棧資訊将傳回 None``除非 *stack_info* 為 ``True。         handle(record)         通過将記錄傳遞給與此記錄器及其祖先關聯的所有處理器來處理(直到某個 propagate 值為 false)。此方法用于從套接字接收的未序列化的以及在本地建立的記錄。使用 filter() 進行記錄程式級别過濾。         makeRecord(name, lvl, fn, lno, msg, args, exc_info, func=None, extra=None, sinfo=None)         這是一種工廠方法,可以在子類中對其進行重寫以建立專門的 LogRecord 執行個體。         hasHandlers()         檢查此記錄器是否配置了任何處理器。通過在此記錄器及其記錄器層次結構中的父級中查找處理器完成此操作。如果找到處理器則傳回 True,否則傳回``False``。隻要找到 “propagate” 屬性設定為 false的記錄器,該方法就會停止搜尋層次結構 —— 其将是最後一個檢查處理器是否存在的記錄器。    

日志級别

日志記錄級别的數值在下表中給出。如果你想要定義自己的級别,并且需要它們具有相對于預定義級别的特定值,那麼這些内容可能是你感興趣的。如果你定義具有相同數值的級别,它将覆寫預定義的值; 預定義的名稱丢失。

級别 數值
CRITICAL 50
ERROR 40
WARNING 30
INFO 20
DEBUG 10
NOTSET

處理器對象

Handler 有以下屬性和方法。注意不要直接執行個體化 Handler ;這個類用來派生其他更有用的子類。但是,子類的 __init__() 方法需要調用 Handler.__init__() 。 class logging.Handler     __init__(level=NOTSET)         初始化 Handler 執行個體時,需要設定它的級别,将過濾清單置為空,并且建立鎖(通過 createLock() )來序列化對 I/O 的通路。         createLock()         初始化一個線程鎖,用來序列化對底層的 I/O 功能的通路,底層的 I/O 功能可能不是線程安全的。         acquire()         使用 createLock() 擷取線程鎖。         release()         使用 acquire() 來釋放線程鎖。         setLevel(level)         給處理器設定門檻值為 level 。日志級别小于 level 将被忽略。建立處理器時,日志級别被設定為 NOTSET (所有的消息都會被處理)。         setFormatter(fmt)         将此處理器的 Formatter 設定為 fmt。         addFilter(filter)         将指定的過濾器 filter 添加到此處理器。         removeFilter(filter)         從此處理器中删除指定的過濾器 filter 。         filter(record)         Applies this handler’s filters to the record and returns a true value if the record is to be processed.          The filters are consulted in turn, until one of them returns a false value. If none of them return a false value, the record will be emitted.          If one returns a false value, the handler will not emit the record.         flush()         確定所有日志記錄從緩存輸出。此版本不執行任何操作,并且應由子類實作。         close()         整理處理器使用的所有資源。此版本不輸出,但從内部處理器清單中删除處理器,内部處理器在 shutdown() 被調用時關閉 。子類應確定從重寫的 close() 方法中調用此方法。         handle(record)         經已添加到處理器的過濾器過濾後,有條件地發出指定的日志記錄。用擷取/釋放 I/O 線程鎖包裝記錄的實際發出行為。         handleError(record)         調用 emit() 期間遇到異常時,應從處理器中調用此方法。如果子產品級屬性 raiseExceptions 是 False,則異常将被靜默忽略。這是大多數情況下日志系統需要的 —— 大多數使用者不會關心日志系統中的錯誤,他們對應用程式錯誤更感興趣。但是,你可以根據需要将其替換為自定義處理器。指定的記錄是發生異常時正在處理的記錄。(raiseExceptions 的預設值是 True,因為這在開發過程中是比較有用的)。         format(record)         如果設定了格式器則用其對記錄進行格式化。否則,使用子產品的預設格式器。         emit(record)         執行實際記錄給定日志記錄所需的操作。這個版本應由子類實作,是以這裡直接引發 NotImplementedError 異常。