Python 中如何使用 setLevel() 設(shè)置日志級(jí)別
日志記錄是任何程序員生活中非常有效的工具。 它不僅可以讓我們更好地理解程序的流程,還可以讓我們了解程序執(zhí)行過程中可能出現(xiàn)的錯(cuò)誤。
Python 提供了一個(gè)單獨(dú)的日志記錄模塊作為其標(biāo)準(zhǔn)庫的一部分,以簡(jiǎn)化日志記錄。 本文將討論日志記錄 setLevel 及其在 Python 中的工作方式。
Python登錄程序的功能
日志記錄是在軟件運(yùn)行時(shí)跟蹤程序流程的過程。 但是,如果您沒有實(shí)現(xiàn)登錄到您的程序中,那么每當(dāng)程序崩潰時(shí),就很難找到發(fā)生問題的根源。
通過在程序中實(shí)現(xiàn)日志記錄,您可以輕松找到問題的根源并立即解決。 它在調(diào)試和開發(fā)軟件時(shí)非常有用。
有時(shí),人們使用打印語句來查找軟件中的問題。 打印可以解決簡(jiǎn)單腳本的問題,但對(duì)于更大、更復(fù)雜的軟件來說,它們不是一個(gè)好的選擇。
Python 在其標(biāo)準(zhǔn)庫中提供了一個(gè)稱為日志記錄的內(nèi)置模塊,該模塊將狀態(tài)消息寫入任何輸出流或文件,以說明程序的哪一部分正在運(yùn)行以及導(dǎo)致了什么問題。
Python 中的日志消息級(jí)別
Python 中的日志記錄模塊根據(jù)其重要性具有不同的狀態(tài)/日志消息級(jí)別。 因此,日志消息的級(jí)別告訴您該日志消息的重要性。
日志消息的不同級(jí)別如下:DEBUG、INFO、WARNING、ERROR 和 CRITICAL,其中 CRITICAL 的重要性最高。
| 日志級(jí)別 | 說明 |
|---|---|
| DEBUG | 它用于在軟件中進(jìn)行調(diào)試。 通常會(huì)在出現(xiàn)問題時(shí)提供詳細(xì)信息。 |
| INFO | 它確保程序中的一切正常。 |
| WARNING | 用來表示將來可能會(huì)出現(xiàn)一些問題,應(yīng)該予以解決以避免將來出現(xiàn)問題。 |
| ERROR | 用于表示軟件由于嚴(yán)重問題而無法執(zhí)行特定功能。 |
| CRITICAL | 此級(jí)別表示導(dǎo)致軟件停止的嚴(yán)重問題。 |
所有這些級(jí)別都是為處理程序或記錄器設(shè)置的,以便在發(fā)生錯(cuò)誤時(shí)可以在適當(dāng)?shù)臅r(shí)間顯示適當(dāng)?shù)南ⅰ?日志記錄級(jí)別在上面根據(jù)它們的重要性進(jìn)行了解釋,第一個(gè)是最不重要的,最后一個(gè)(CRITICAL 級(jí)別)是最重要的。
使用 Python 日志記錄模塊中的 setLevel() 函數(shù)設(shè)置日志記錄級(jí)別
setLevel(level) 函數(shù)用于將記錄器的閾值設(shè)置為指定級(jí)別。 低于指定級(jí)別的日志記錄消息將被忽略,而具有更高嚴(yán)重性的消息將由為記錄器提供服務(wù)的相應(yīng)處理程序發(fā)出。
Python 中的日志記錄有一個(gè)有效級(jí)別的概念。 最初,當(dāng)創(chuàng)建記錄器時(shí),它被設(shè)置為 NOTSET 級(jí)別。
但是,此 NOTSET 不是有效級(jí)別。 有效級(jí)別是在 setLevel(level) 的幫助下明確設(shè)置的級(jí)別。
創(chuàng)建記錄器時(shí),如果未顯式設(shè)置其級(jí)別,則檢查其父記錄器的級(jí)別以獲得記錄器的有效級(jí)別,該級(jí)別將使用 setLevel(level) 顯式設(shè)置。 如果父記錄器也未設(shè)置為有效級(jí)別,則檢查其父記錄器。
該過程將繼續(xù),直到找到 NOTSET 以外的級(jí)別或到達(dá)根。 根記錄器設(shè)置為默認(rèn)級(jí)別警告; 因此,在這種情況下,root 的默認(rèn)級(jí)別將被視為有效級(jí)別。
現(xiàn)在,讓我們通過一些代碼示例了解 setLevel(level) 的用法。
import logging
logging.debug('Debug message')
logging.info('Info message')
logging.warning('Warning message')
logging.error('Error message')
logging.critical('Critical message')輸出:
WARNING:root:Warning message
ERROR:root:Error message
CRITICAL:root:Critical message
如上面的輸出所示,只打印了 WARNING、ERROR 和 CRITICAL 消息,因?yàn)楦涗浧鞯哪J(rèn)級(jí)別 WARNING 已被視為有效級(jí)別,因?yàn)闆]有指定其他記錄器或其父級(jí)。 因此,將打印 WARNING 及之后級(jí)別的所有消息,而忽略不那么重要的消息。
讓我們看一個(gè)例子,記錄器將有效級(jí)別視為父級(jí)別。
import logging
parent_logger = logging.getLogger('parent')
parent_logger.setLevel(4)
child_logger = logging.getLogger('parent.child')
print(parent_logger.getEffectiveLevel())
print(child_logger.getEffectiveLevel())輸出:
4
4
可以看到,child_logger沒有設(shè)置有效級(jí)別,所以使用parent_logger的級(jí)別作為有效級(jí)別。
Python 中的日志處理程序
Python 中的處理程序是負(fù)責(zé)將適當(dāng)?shù)娜罩鞠⒂涗浀教幚沓绦虻闹付康牡氐膶?duì)象; 這些處理程序也像記錄器一樣工作。 如果記錄器沒有設(shè)置處理程序,則會(huì)在其祖先中搜索處理程序。
現(xiàn)在讓我們看看處理程序在日志記錄中的用法:
import logging
logger = logging.getLogger('example')
logger.setLevel(logging.INFO)
fileHandler = logging.FileHandler('p1.log')
fileHandler.setLevel(logging.INFO)
chl = logging.StreamHandler()
chl.setLevel(logging.INFO)
logger.addHandler(fileHandler)
logger.addHandler(chl)
logger.info('Information')輸出:
Information
我們?cè)谏厦娴拇a中創(chuàng)建了兩個(gè)處理程序:fileHandler 和 chl。 fileHandler 將記錄發(fā)送到 p1.log 文件,chl 處理程序?qū)⒂涗洶l(fā)送到流。
但是,如果未指定流,則使用 sys.stderr。 最后,使用 addHandler 將處理程序添加到記錄器。
現(xiàn)在您一定想知道為什么我們?cè)O(shè)置了兩次級(jí)別:一次用于記錄器,另一次用于處理程序。 您可以刪除處理程序上的 setLevel(),這會(huì)將消息的所有級(jí)別過濾留給記錄器。
但是,如果您為處理程序和記錄器設(shè)置級(jí)別,則會(huì)出現(xiàn)不同的情況。 記錄器首先根據(jù)級(jí)別過濾消息; 因此,如果您將記錄器設(shè)置為 WARNING、INFO 或任何更高級(jí)別,并將處理程序設(shè)置為 DEBUG,您將不會(huì)收到任何 DEBUG 日志消息,因?yàn)橛涗浧魇紫葧?huì)忽略它。
同樣,如果您將記錄器設(shè)置為 DEBUG 并將處理程序設(shè)置為任何更高級(jí)別,例如 INFO,您也不會(huì)收到任何 DEBUG 消息,因?yàn)樘幚沓绦驅(qū)⒕芙^它們。 即使記錄器批準(zhǔn)它,處理程序也會(huì)拒絕它(因?yàn)?INFO > DEBUG)。
因此,在為記錄器和處理程序設(shè)置級(jí)別時(shí)應(yīng)該足夠小心,以確保軟件正常工作。
總結(jié)
在本文中,我們討論了日志記錄 setLevel() 及其在 Python 中的工作方式。
日志記錄是一種非常有效的工具,通過記錄程序的流程并發(fā)現(xiàn)錯(cuò)誤的可能性來管理軟件或程序的代碼。 對(duì)于 Python 中的日志記錄,我們根據(jù)它們的重要性為不同的日志消息設(shè)置不同的級(jí)別。
所有這些級(jí)別都是使用 setLevel 設(shè)置的,本文對(duì)此進(jìn)行了非常詳細(xì)的解釋。
到此這篇關(guān)于在 Python 中使用 setLevel() 設(shè)置日志級(jí)別的文章就介紹到這了,更多相關(guān)Python setLevel() 設(shè)置日志級(jí)別內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
如何將python的數(shù)據(jù)存儲(chǔ)到mysql數(shù)據(jù)庫中
在很多數(shù)據(jù)處理項(xiàng)目中,將數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)庫中是非常常見的操作,下面這篇文章主要給大家介紹了關(guān)于如何將python的數(shù)據(jù)存儲(chǔ)到mysql數(shù)據(jù)庫中的相關(guān)資料,需要的朋友可以參考下2023-12-12
Python使用正則表達(dá)式實(shí)現(xiàn)爬蟲數(shù)據(jù)抽取
這篇文章主要介紹了Python使用正則表達(dá)式實(shí)現(xiàn)爬蟲數(shù)據(jù)抽取,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08
Python中五種不同解析庫的應(yīng)用與提取速度對(duì)比
這篇文章主要為大家詳細(xì)介紹了Python中五種不同解析庫的應(yīng)用與提取速度對(duì)比,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2025-05-05
Win10操作系統(tǒng)中PyTorch虛擬環(huán)境配置+PyCharm配置
本文主要介紹了Win10操作系統(tǒng)中PyTorch虛擬環(huán)境配置+PyCharm配置,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09
Django+JS 實(shí)現(xiàn)點(diǎn)擊頭像即可更改頭像的方法示例
這篇文章主要介紹了Django+JS 實(shí)現(xiàn)點(diǎn)擊頭像即可更改頭像的方法示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-12-12
使用Python高效實(shí)現(xiàn)Excel轉(zhuǎn)PDF
在日常辦公和數(shù)據(jù)處理過程中,Excel 是我們最常用的工具,而 PDF 則是方便共享、打印和歸檔的格式,下面我們來看看如何使用 Python 把 Excel 轉(zhuǎn)換為 PDF吧2025-09-09

