Python?日志記錄模塊的綜合指南
Python 日志模塊的綜合指南
日志記錄是軟件開發(fā)的一個重要方面,它允許開發(fā)人員跟蹤和管理應用程序的行為。Python 提供了一個功能強大的日志模塊,可提供靈活和可定制的日志功能。在本文中,我們將深入探討 Python 日志模塊,包括其用法、優(yōu)點和高級功能。
是什么讓 print 語句變得不倫不類?
print
語句被認為不是很 Pythonic,因為它們通常用于臨時調(diào)試,會使代碼變得雜亂無章。一旦你調(diào)試完代碼,你就需要返回并刪除所有你寫的 print
語句。相反,Python 鼓勵使用日志模塊,它可以更好地控制消息、級別和目的地,同時有助于保持代碼更整潔、更有條理。
相關(guān)閱讀:Python 的 print 函數(shù)你真的會用了嗎?
Python 日志級別
在 Python 的日志模塊中,有多個日志級別,每個級別都有自己的意義和用例。以下是標準日志級別及其簡要說明:
• DEBUG:用于診斷問題的詳細信息,在開發(fā)和調(diào)試過程中使用。
• INFO:確認運行情況符合預期;關(guān)于程序執(zhí)行情況的信息。
• WARNING:表示潛在的問題或不一定妨礙程序運行的問題。
• ERROR:表示更嚴重的問題,可能導致程序無法正常運行。
• CRITICAL:通常會導致程序終止的嚴重錯誤;最嚴重的日志記錄級別。
開發(fā)人員可以根據(jù)需要定義其他日志記錄級別,不過現(xiàn)有級別通常足以應對大多數(shù)情況。每個內(nèi)置日志記錄級別都有一個特定的數(shù)值來表示其重要性。
下面是 Python 日志模塊中關(guān)鍵組件和方法的簡化解釋:
Constants:
• Constants(常量)是代表日志級別的固定值,如 DEBUG
、INFO
、WARNING
、ERROR
和 CRITICAL
。
Classes(類):
• Logger
(記錄器):代表日志記錄通道并負責發(fā)出日志信息的對象。
• Handler
(處理程序):定義日志信息發(fā)送位置(如控制臺或文件)的類。
• Filter
(過濾器):用于指定應根據(jù)特定條件處理哪些日志記錄的類。
Methods(方法):
• logger.info(msg)
:記錄 INFO 級別的信息。
• logger.warning(msg)
:記錄警告級別的警告信息。
• logger.error(msg)
:以 ERROR 級別記錄錯誤信息。
• logger.critical(msg)
:以 CRITICAL 級別記錄關(guān)鍵信息。
• logger.log(lvl, msg)
:以自定義整數(shù)日志級別 (lvl) 記錄一條信息。
• logger.exception(msg)
:以 ERROR 級別記錄錯誤信息,并包含異常信息。
• logger.setLevel(lvl)
:設置此日志記錄器的最小日志級別(閾值),忽略低于該級別的消息。
• logger.addFilter(filt)
:為該日志記錄器添加過濾器,允許對處理的日志記錄進行精細控制。
• logger.removeFilter(filt)
:從該日志記錄器中刪除特定過濾器。
• logger.filter(record)
:將日志記錄應用日志記錄器的過濾器,如果應予以處理,則返回 True,否則返回 False。
• logger.addHandler(hdlr)
:為該日志記錄器添加日志處理程序(輸出目標)。
• logger.removeHandler(hdlr)
:從該日志記錄器中刪除特定日志處理程序。
• logger.hasHandlers()
:檢查日志記錄器是否有任何已配置的日志處理程序。
這些方法和概念是 Python 日志模塊的基礎,可讓您控制日志級別、過濾器、處理程序等,以便在應用程序中有效記錄日志。
常用的處理程序:
除基本處理程序類外,還提供了許多有用的子類。
• StreamHandler:向控制臺或類文件對象發(fā)送消息。
• FileHandler:向磁盤上的文件發(fā)送信息。
• RotatingFileHandler(旋轉(zhuǎn)文件處理程序 向有大小限制和自動文件輪換的文件發(fā)送信息。
• TimedRotatingFileHandler:向基于時間輪換的文件發(fā)送信息。
• SocketHandler:通過網(wǎng)絡套接字發(fā)送信息。
• DatagramHandler:通過 UDP 套接字發(fā)送信息。
• SMTPHandler:向電子郵件地址發(fā)送信息。
• SysLogHandler:向系統(tǒng)日志守護進程發(fā)送信息。
• NTEventLogHandler:向 Windows 事件日志發(fā)送消息。
• MemoryHandler:在內(nèi)存中緩沖信息,并根據(jù)標準刷新。
• HTTPHandler:向 HTTP 服務器發(fā)送信息。
• WatchedFileHandler:監(jiān)控并在日志文件發(fā)生變化時重新打開日志文件。
• QueueHandler:隊列處理程序:向隊列發(fā)送消息。
• NullHandler:忽略錯誤信息,對庫開發(fā)人員很有用。
Python 日志基礎知識
要使用 Python 的日志模塊將事件記錄到文件中,首先要從庫中導入該模塊,而且非常簡單。
通過指定事件記錄的文件名、調(diào)整格式、在追加和寫入模式之間切換、設置記錄級別閾值以及從可用選項中自定義屬性來配置記錄器。如示例所示,創(chuàng)建一個實例并使用其方法。
記錄變量
這段代碼展示了如何使用 logging.error()
函數(shù)記錄錯誤信息,其中包括變量名的空格符 (%s)
。
import logging name = 'Rocky' logging.error(f'{name} raised an error') Output: ERROR:root:Rocky raised an error
記錄所有級別
該代碼顯示了各級記錄信息。
# 導入日志模塊 import logging # 創(chuàng)建并配置日志記錄器 logging.basicConfig(filename="newfile.log", # 指定日志文件名 format='%(asctime)s %(message)s', # 定義日志信息格式 filemode='w') # 將文件模式設置為 "w",以便寫入。 # 創(chuàng)建日志記錄器對象 logger = logging.getLogger() # 設置日志記錄器的閾值為 DEBUG 級別 logger.setLevel(logging.DEBUG) # 記錄不同嚴重程度的測試信息 logger.debug("A harmless debug message") # 調(diào)試級別信息 logger.info("Just providing some information") # 信息級消息 logger.warning("This is a warning") # 警告級別消息 logger.error("Have you attempted to divide by zero?") # 錯誤級別信息 logger.critical("The internet connection is down") # 嚴重級別信息 Output: DEBUG:root:A harmless debug message INFO:root:Just providing some information WARNING:root:This is a warning ERROR:root:Have you attempted to divide by zero? CRITICAL:root:The internet connection is down
提供日志配置的另一種表示方法。
file name : temp.conf [loggers] keys=root,simpleExample [handlers] keys=consoleHandler [formatters] keys=simpleFormatter [logger_root] level=DEBUG handlers=consoleHandler [logger_simpleExample] level=DEBUG handlers=consoleHandler qualname=simpleExample propagate=0 [handler_consoleHandler] class=StreamHandler level=DEBUG formatter=simpleFormatter args=(sys.stdout,) [formatter_simpleFormatter] format=%(asctime)s - %(name)s - %(levelname)s - %(message)s
所提供的代碼利用 "temp.conf "配置文件中指定的設置來初始化日志系統(tǒng)。然后創(chuàng)建一個名為 "simpleExample "的日志記錄器,并使用一系列日志級別記錄信息。
import logging import logging.config logging.config.fileConfig('temp.conf') logger = logging.getLogger('simpleExample') logger.debug('debug message') logger.info('info message') logger.warning('warn message') logger.error('error message') logger.critical('critical message') Output: 2023-09-01 13:04:35,581 - simpleExample - DEBUG - debug message 2023-09-01 13:04:35,581 - simpleExample - INFO - info message 2023-09-01 13:04:35,581 - simpleExample - WARNING - warn message 2023-09-01 13:04:35,581 - simpleExample - ERROR - error message 2023-09-01 13:04:35,582 - simpleExample - CRITICAL - critical message
Python 日志異常
在日志記錄過程中使用異常,可以在特定情況下提示應用程序中的異常情況或錯誤,從而達到有價值的目的。當異常發(fā)生時,它就像一面紅旗,會打斷正常的程序流程,并告知調(diào)用者或日志系統(tǒng)所遇到的問題。
import logging # 配置日志系統(tǒng) logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s') # 定義對給定值執(zhí)行操作的函數(shù) def perform_operation(value): if value < 0: raise ValueError("Invalid value: The value cannot be negative.") else: logging.info("Operation completed successfully.") try: input_value = int(input("Please input a numerical value: ")) perform_operation(input_value) except ValueError as ve: logging.exception("An exception occurred: %s", str(ve)) Output: Please input a numerical value: -6 ERROR:root:An exception occurred: Invalid value: The value cannot be negative. Traceback (most recent call last): File "<ipython-input-15-d0b160f9076e>", line 21, in <cell line: 16> perform_operation(input_value) File "<ipython-input-15-d0b160f9076e>", line 11, in perform_operation raise ValueError("Invalid value: The value cannot be negative.") ValueError: Invalid value: The value cannot be negative.
這樣就可以記錄系統(tǒng)的工作情況,隨后進行分析。不過,為了防止文件過大,必須不斷更新文件。
以上就是Python 日志記錄模塊的綜合指南的詳細內(nèi)容,更多關(guān)于Python 日志記錄模塊的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Django JSonResponse對象的實現(xiàn)
本文主要介紹了Django JSonResponse對象的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-03-03Pytorch實現(xiàn)將模型的所有參數(shù)的梯度清0
這篇文章主要介紹了Pytorch實現(xiàn)將模型的所有參數(shù)的梯度清0,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-06-06Python?Conda安裝包報錯:PackagesNotFoundError兩種解決方法
這篇文章主要給大家介紹了關(guān)于Python?Conda安裝包報錯:PackagesNotFoundError的兩種解決方法,這通常意味著安裝程序正在尋找的環(huán)境包沒有在 conda 的默認通道中找到,文中將解決的辦法介紹的非常詳細,需要的朋友可以參考下2024-06-06Python上級目錄文件導入的幾種方法(from.import)
有時候我們可能需要import另一個路徑下的python文件,下面這篇文章主要給大家介紹了關(guān)于Python上級目錄文件導入的幾種方法,文中通過代碼介紹的非常詳細,需要的朋友可以參考下2023-12-12python數(shù)據(jù)分析必會的Pandas技巧匯總
用Python做數(shù)據(jù)分析光是掌握numpy和matplotlib可不夠,numpy雖然能夠幫我們處理處理數(shù)值型數(shù)據(jù),但很多時候,還有字符串,還有時間序列等,比如:我們通過爬蟲獲取到了存儲在數(shù)據(jù)庫中的數(shù)據(jù),一些Pandas必會的用法,讓你的數(shù)據(jù)分析水平更上一層樓2021-08-08python爬蟲學習筆記--BeautifulSoup4庫的使用詳解
這篇文章主要介紹了Python中使用Beautiful Soup庫的超詳細教程,示例代碼基于Python2.x版本,極力推薦!需要的朋友可以參考下2021-08-08