python3從零學(xué)習(xí)-5.6.4、日志標(biāo)準(zhǔn)庫(kù)logging

源代碼:?Lib/logging/__init__.py

class logging.Logger

?? ?propagate

?? ??? ?如果這個(gè)屬性為真,記錄到這個(gè)記錄器的事件將會(huì)傳遞給這個(gè)高級(jí)別管理器的記錄器(原型),此外任何關(guān)聯(lián)到這個(gè)記錄器的管理器。消息會(huì)直接傳遞給原型記錄器的管理器 - 既不是這個(gè)原型記錄器的級(jí)別也不是過(guò)濾器是在考慮的問(wèn)題。

?? ??? ?如果等于假,記錄消息將不會(huì)傳遞給這個(gè)原型記錄器的管理器。

?? ??? ?構(gòu)造器將這個(gè)屬性初始化為 True。

?? ?setLevel(level)

?? ??? ?給 logger 設(shè)置閾值為 level 。日志等級(jí)小于 level 會(huì)被忽略。嚴(yán)重性為 level 或更高的日志消息將由該 logger 的任何一個(gè)或多個(gè) handler 發(fā)出,除非將處理程序的級(jí)別設(shè)置為比 level 更高的級(jí)別。

?? ??? ?創(chuàng)建一個(gè) logger 時(shí),設(shè)置級(jí)別為 NOTSET (當(dāng) logger 是根 logger 時(shí),將處理所有消息;當(dāng) logger 是非根 logger 時(shí),所有消息會(huì)委派給父級(jí))。注意根 logger 創(chuàng)建時(shí)使用的是 WARNING 級(jí)別。

?? ??? ?委派給父級(jí)的意思是如果一個(gè)記錄器的級(jí)別設(shè)置為NOTSET,遍歷其祖先記錄器鏈,直到找到另一個(gè)NOTSET級(jí)別的祖先或到達(dá)根為止。

?? ??? ?如果發(fā)現(xiàn)某個(gè)父級(jí)的級(jí)別 不是NOTSET ,那么該父級(jí)的級(jí)別將被視為發(fā)起搜索的記錄器的有效級(jí)別,并用于確定如何處理日志事件。

?? ??? ?如果到達(dá)根 logger ,并且其級(jí)別為NOTSET,則將處理所有消息。否則,將使用根記錄器的級(jí)別作為有效級(jí)別。

?? ?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()

?? ??? ?指示此記錄器的有效級(jí)別。如果通過(guò) setLevel() 設(shè)置了除 NOTSET 以外的值,則返回該值。否則,將層次結(jié)構(gòu)遍歷到根,直到找到除 NOTSET 以外的其他值,然后返回該值。返回的值是一個(gè)整數(shù),通常為 logging.DEBUG、 logging.INFO 等等。

?? ?getChild(suffix)

?? ??? ?返回由后綴確定的,是該記錄器的后代的記錄器。 因此,logging.getLogger('abc').getChild('def.ghi') 與 logging.getLogger('abc.def.ghi') 將返回相同的記錄器。 這是一個(gè)便捷方法,當(dāng)使用如 __name__ 而不是字符串字面值命名父記錄器時(shí)很有用。

?? ?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 級(jí)別的消息。參數(shù)解釋同 debug()。

?? ?warning(msg, *args, **kwargs)

?? ??? ?在此記錄器上記錄 WARNING 級(jí)別的消息。參數(shù)解釋同 debug()。

? ? error(msg, *args, **kwargs)

?? ??? ?在此記錄器上記錄 ERROR 級(jí)別的消息。參數(shù)解釋同 debug()。

?? ?critical(msg, *args, **kwargs)

?? ??? ?在此記錄器上記錄 CRITICAL 級(jí)別的消息。參數(shù)解釋同 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 級(jí)別的消息。參數(shù)解釋同 debug()。異常信息將添加到日志消息中。僅應(yīng)從異常處理程序中調(diào)用此方法。

?? ?addFilter(filter)

?? ??? ?將指定的過(guò)濾器 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)

?? ??? ?查找調(diào)用源的文件名和行號(hào),以 文件名,行號(hào),函數(shù)名稱和堆棧信息 4元素元組的形式返回。堆棧信息將返回 None``除非 *stack_info* 為 ``True。

?? ?handle(record)

?? ??? ?通過(guò)將記錄傳遞給與此記錄器及其祖先關(guān)聯(lián)的所有處理器來(lái)處理(直到某個(gè) propagate 值為 false)。此方法用于從套接字接收的未序列化的以及在本地創(chuàng)建的記錄。使用 filter() 進(jìn)行記錄程序級(jí)別過(guò)濾。

?? ?makeRecord(name, lvl, fn, lno, msg, args, exc_info, func=None, extra=None, sinfo=None)

?? ??? ?這是一種工廠方法,可以在子類(lèi)中對(duì)其進(jìn)行重寫(xiě)以創(chuàng)建專門(mén)的 LogRecord 實(shí)例。

?? ?hasHandlers()

?? ??? ?檢查此記錄器是否配置了任何處理器。通過(guò)在此記錄器及其記錄器層次結(jié)構(gòu)中的父級(jí)中查找處理器完成此操作。如果找到處理器則返回 True,否則返回``False``。只要找到 “propagate” 屬性設(shè)置為 false的記錄器,該方法就會(huì)停止搜索層次結(jié)構(gòu) —— 其將是最后一個(gè)檢查處理器是否存在的記錄器。

日志級(jí)別

日志記錄級(jí)別的數(shù)值在下表中給出。如果你想要定義自己的級(jí)別,并且需要它們具有相對(duì)于預(yù)定義級(jí)別的特定值,那么這些內(nèi)容可能是你感興趣的。如果你定義具有相同數(shù)值的級(jí)別,它將覆蓋預(yù)定義的值; 預(yù)定義的名稱丟失。

級(jí)別數(shù)值

CRITICAL50

ERROR40

WARNING30

INFO20

DEBUG10

NOTSET0

處理器對(duì)象

Handler 有以下屬性和方法。注意不要直接實(shí)例化 Handler ;這個(gè)類(lèi)用來(lái)派生其他更有用的子類(lèi)。但是,子類(lèi)的 __init__() 方法需要調(diào)用 Handler.__init__() 。

class logging.Handler

?? ?__init__(level=NOTSET)

?? ??? ?初始化 Handler 實(shí)例時(shí),需要設(shè)置它的級(jí)別,將過(guò)濾列表置為空,并且創(chuàng)建鎖(通過(guò) createLock() )來(lái)序列化對(duì) I/O 的訪問(wèn)。

?? ?createLock()

?? ??? ?初始化一個(gè)線程鎖,用來(lái)序列化對(duì)底層的 I/O 功能的訪問(wèn),底層的 I/O 功能可能不是線程安全的。

?? ?acquire()

?? ??? ?使用 createLock() 獲取線程鎖。

?? ?release()

?? ??? ?使用 acquire() 來(lái)釋放線程鎖。

?? ?setLevel(level)

?? ??? ?給處理器設(shè)置閾值為 level 。日志級(jí)別小于 level 將被忽略。創(chuàng)建處理器時(shí),日志級(jí)別被設(shè)置為 NOTSET (所有的消息都會(huì)被處理)。

?? ?setFormatter(fmt)

?? ??? ?將此處理器的 Formatter 設(shè)置為 fmt。

?? ?addFilter(filter)

?? ??? ?將指定的過(guò)濾器 filter 添加到此處理器。

?? ?removeFilter(filter)

?? ??? ?從此處理器中刪除指定的過(guò)濾器 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()

?? ??? ?確保所有日志記錄從緩存輸出。此版本不執(zhí)行任何操作,并且應(yīng)由子類(lèi)實(shí)現(xiàn)。

?? ?close()

?? ??? ?整理處理器使用的所有資源。此版本不輸出,但從內(nèi)部處理器列表中刪除處理器,內(nèi)部處理器在 shutdown() 被調(diào)用時(shí)關(guān)閉 。子類(lèi)應(yīng)確保從重寫(xiě)的 close() 方法中調(diào)用此方法。

?? ?handle(record)

?? ??? ?經(jīng)已添加到處理器的過(guò)濾器過(guò)濾后,有條件地發(fā)出指定的日志記錄。用獲取/釋放 I/O 線程鎖包裝記錄的實(shí)際發(fā)出行為。

?? ?handleError(record)

?? ??? ?調(diào)用 emit() 期間遇到異常時(shí),應(yīng)從處理器中調(diào)用此方法。如果模塊級(jí)屬性 raiseExceptions 是 False,則異常將被靜默忽略。這是大多數(shù)情況下日志系統(tǒng)需要的 —— 大多數(shù)用戶不會(huì)關(guān)心日志系統(tǒng)中的錯(cuò)誤,他們對(duì)應(yīng)用程序錯(cuò)誤更感興趣。但是,你可以根據(jù)需要將其替換為自定義處理器。指定的記錄是發(fā)生異常時(shí)正在處理的記錄。(raiseExceptions 的默認(rèn)值是 True,因?yàn)檫@在開(kāi)發(fā)過(guò)程中是比較有用的)。

?? ?format(record)

?? ??? ?如果設(shè)置了格式器則用其對(duì)記錄進(jìn)行格式化。否則,使用模塊的默認(rèn)格式器。

?? ?emit(record)

?? ??? ?執(zhí)行實(shí)際記錄給定日志記錄所需的操作。這個(gè)版本應(yīng)由子類(lèi)實(shí)現(xiàn),因此這里直接引發(fā) NotImplementedError 異常。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容