Python 中如何使用 setLevel() 設置日志級別
日志記錄是任何程序員生活中非常有效的工具。 它不僅可以讓我們更好地理解程序的流程,還可以讓我們了解程序執(zhí)行過程中可能出現(xiàn)的錯誤。
Python 提供了一個單獨的日志記錄模塊作為其標準庫的一部分,以簡化日志記錄。 本文將討論日志記錄 setLevel 及其在 Python 中的工作方式。
Python登錄程序的功能
日志記錄是在軟件運行時跟蹤程序流程的過程。 但是,如果您沒有實現(xiàn)登錄到您的程序中,那么每當程序崩潰時,就很難找到發(fā)生問題的根源。
通過在程序中實現(xiàn)日志記錄,您可以輕松找到問題的根源并立即解決。 它在調(diào)試和開發(fā)軟件時非常有用。
有時,人們使用打印語句來查找軟件中的問題。 打印可以解決簡單腳本的問題,但對于更大、更復雜的軟件來說,它們不是一個好的選擇。
Python 在其標準庫中提供了一個稱為日志記錄的內(nèi)置模塊,該模塊將狀態(tài)消息寫入任何輸出流或文件,以說明程序的哪一部分正在運行以及導致了什么問題。
Python 中的日志消息級別
Python 中的日志記錄模塊根據(jù)其重要性具有不同的狀態(tài)/日志消息級別。 因此,日志消息的級別告訴您該日志消息的重要性。
日志消息的不同級別如下:DEBUG、INFO、WARNING、ERROR 和 CRITICAL,其中 CRITICAL 的重要性最高。
日志級別 | 說明 |
---|---|
DEBUG | 它用于在軟件中進行調(diào)試。 通常會在出現(xiàn)問題時提供詳細信息。 |
INFO | 它確保程序中的一切正常。 |
WARNING | 用來表示將來可能會出現(xiàn)一些問題,應該予以解決以避免將來出現(xiàn)問題。 |
ERROR | 用于表示軟件由于嚴重問題而無法執(zhí)行特定功能。 |
CRITICAL | 此級別表示導致軟件停止的嚴重問題。 |
所有這些級別都是為處理程序或記錄器設置的,以便在發(fā)生錯誤時可以在適當?shù)臅r間顯示適當?shù)南ⅰ?日志記錄級別在上面根據(jù)它們的重要性進行了解釋,第一個是最不重要的,最后一個(CRITICAL 級別)是最重要的。
使用 Python 日志記錄模塊中的 setLevel() 函數(shù)設置日志記錄級別
setLevel(level)
函數(shù)用于將記錄器的閾值設置為指定級別。 低于指定級別的日志記錄消息將被忽略,而具有更高嚴重性的消息將由為記錄器提供服務的相應處理程序發(fā)出。
Python 中的日志記錄有一個有效級別的概念。 最初,當創(chuàng)建記錄器時,它被設置為 NOTSET 級別。
但是,此 NOTSET 不是有效級別。 有效級別是在 setLevel(level)
的幫助下明確設置的級別。
創(chuàng)建記錄器時,如果未顯式設置其級別,則檢查其父記錄器的級別以獲得記錄器的有效級別,該級別將使用 setLevel(level)
顯式設置。 如果父記錄器也未設置為有效級別,則檢查其父記錄器。
該過程將繼續(xù),直到找到 NOTSET 以外的級別或到達根。 根記錄器設置為默認級別警告; 因此,在這種情況下,root 的默認級別將被視為有效級別。
現(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 消息,因為根記錄器的默認級別 WARNING 已被視為有效級別,因為沒有指定其他記錄器或其父級。 因此,將打印 WARNING 及之后級別的所有消息,而忽略不那么重要的消息。
讓我們看一個例子,記錄器將有效級別視為父級別。
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沒有設置有效級別,所以使用parent_logger的級別作為有效級別。
Python 中的日志處理程序
Python 中的處理程序是負責將適當?shù)娜罩鞠⒂涗浀教幚沓绦虻闹付康牡氐膶ο螅?這些處理程序也像記錄器一樣工作。 如果記錄器沒有設置處理程序,則會在其祖先中搜索處理程序。
現(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
我們在上面的代碼中創(chuàng)建了兩個處理程序:fileHandler 和 chl。 fileHandler 將記錄發(fā)送到 p1.log 文件,chl 處理程序?qū)⒂涗洶l(fā)送到流。
但是,如果未指定流,則使用 sys.stderr。 最后,使用 addHandler 將處理程序添加到記錄器。
現(xiàn)在您一定想知道為什么我們設置了兩次級別:一次用于記錄器,另一次用于處理程序。 您可以刪除處理程序上的 setLevel(),這會將消息的所有級別過濾留給記錄器。
但是,如果您為處理程序和記錄器設置級別,則會出現(xiàn)不同的情況。 記錄器首先根據(jù)級別過濾消息; 因此,如果您將記錄器設置為 WARNING、INFO 或任何更高級別,并將處理程序設置為 DEBUG,您將不會收到任何 DEBUG 日志消息,因為記錄器首先會忽略它。
同樣,如果您將記錄器設置為 DEBUG 并將處理程序設置為任何更高級別,例如 INFO,您也不會收到任何 DEBUG 消息,因為處理程序?qū)⒕芙^它們。 即使記錄器批準它,處理程序也會拒絕它(因為 INFO > DEBUG)。
因此,在為記錄器和處理程序設置級別時應該足夠小心,以確保軟件正常工作。
總結(jié)
在本文中,我們討論了日志記錄 setLevel()
及其在 Python 中的工作方式。
日志記錄是一種非常有效的工具,通過記錄程序的流程并發(fā)現(xiàn)錯誤的可能性來管理軟件或程序的代碼。 對于 Python 中的日志記錄,我們根據(jù)它們的重要性為不同的日志消息設置不同的級別。
所有這些級別都是使用 setLevel 設置的,本文對此進行了非常詳細的解釋。
到此這篇關于在 Python 中使用 setLevel() 設置日志級別的文章就介紹到這了,更多相關Python setLevel() 設置日志級別內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Python實現(xiàn)pdf轉(zhuǎn)word詳細代碼
在日常工作中,我們經(jīng)常會遇到需要將PDF文件轉(zhuǎn)換成Word文件的需求。雖然市面上有許多PDF轉(zhuǎn)Word的工具,但是它們通常需要付費或者有轉(zhuǎn)換后的格式問題,這篇文章主要給大家介紹了關于Python實現(xiàn)pdf轉(zhuǎn)word的相關資料,需要的朋友可以參考下2023-09-09pytorch制作自己的LMDB數(shù)據(jù)操作示例
這篇文章主要介紹了pytorch制作自己的LMDB數(shù)據(jù)操作,結(jié)合實例形式分析了pytorch使用lmdb的相關操作技巧與使用注意事項,需要的朋友可以參考下2019-12-12Python使用selenium實現(xiàn)網(wǎng)頁用戶名 密碼 驗證碼自動登錄功能
這篇文章主要介紹了Python使用selenium實現(xiàn)網(wǎng)頁用戶名 密碼 驗證碼自動登錄功能,實現(xiàn)思路很簡單,感興趣的朋友跟隨腳本之家小編一起學習吧2018-05-05python實現(xiàn)快速文件格式批量轉(zhuǎn)換的方法
這篇文章主要介紹了python實現(xiàn)快速文件格式批量轉(zhuǎn)換的方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-10-10純用NumPy實現(xiàn)神經(jīng)網(wǎng)絡的示例代碼
這篇文章主要介紹了純用NumPy實現(xiàn)神經(jīng)網(wǎng)絡的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-10-10