使用logzero在Python中進行簡單日志記錄
快速了解一個方便的日志庫,來幫助你掌握這個重要的編程概念。
logzero 庫使日志記錄就像打印語句一樣容易,是簡單性的杰出代表。我不確定 logzero 的名稱是否要與 pygame-zero、GPIO Zero 和 guizero 這樣的 “zero 樣板庫”契合,但是肯定屬于該類別。它是一個 Python 庫,可以使日志記錄變得簡單明了。
你可以使用它基本的記錄到標(biāo)準(zhǔn)輸出的日志記錄,就像你可以使用 print 來獲得信息和調(diào)試一樣,學(xué)習(xí)它的更高級日志記錄(例如記錄到文件)的學(xué)習(xí)曲線也很平滑。
首先,使用 pip 安裝 logzero:
$ sudo pip3 install logzero
在 Python 文件中,導(dǎo)入 logger 并嘗試以下一個或所有日志實例:
from logzero import loggerlogger.debug("hello")logger.info("info")logger.warning("warning")logger.error("error")
輸出以易于閱讀的方式自動著色:
Python, Raspberry Pi: import logger
因此現(xiàn)在不要再使用 print 來了解發(fā)生了什么,而應(yīng)使用有相關(guān)日志級別的日志器。
在 Python 中將日志寫入文件
如果你閱讀至此,并會在你寫代碼時做一點改變,這對我就足夠了。如果你要了解更多,請繼續(xù)閱讀!
寫到標(biāo)準(zhǔn)輸出對于測試新程序不錯,但是僅當(dāng)你登錄到運行腳本的計算機時才有用。在很多時候,你需要遠程執(zhí)行代碼并在事后查看錯誤。這種情況下,記錄到文件很有幫助。讓我們嘗試一下:
from logzero import logger, logfilelogfile('/home/pi/test.log')
現(xiàn)在,你的日志條目將記錄到文件 test.log 中。記住確保腳本有權(quán)限寫入該文件及其目錄結(jié)構(gòu)。
你也可以指定更多選項:
logfile('/home/pi/test.log', maxBytes=1e6, backupCount=3)
現(xiàn)在,當(dāng)提供給 test.log 文件的數(shù)據(jù)達到 1MB(106 字節(jié))時,它將通過 test.log.1、test.log.2 等文件輪替寫入。這種行為可以避免系統(tǒng)打開和關(guān)閉大量 I/O 密集的日志文件,以至于系統(tǒng)無法打開和關(guān)閉。更專業(yè)一點,你或許還要記錄到 /var/log。假設(shè)你使用的是 Linux,那么創(chuàng)建一個目錄并將用戶設(shè)為所有者,以便可以寫入該目錄:
$ sudo mkdir /var/log/test$ sudo chown pi /var/log/test
然后在你的 Python 代碼中,更改 logfile 路徑:
logfile('/var/log/test/test.log', maxBytes=1e6, backupCount=3)
當(dāng)要在 logfile 中捕獲異常時,可以使用 logging.exception:
try:c = a / bexcept Exception as e:logger.exception(e)
這將輸出(在 b 為零的情況下):
[E 190422 23:41:59 test:9] division by zeroTraceback (most recent call last):File "test.py", line 7, inc = a / bZeroDivisionError: division by zero
你會得到日志,還有完整回溯。另外,你可以使用 logging.error 并隱藏回溯:
try:c = a / bexcept Exception as e:logger.error(f"{e.__class__.__name__}: {e}")
現(xiàn)在,將產(chǎn)生更簡潔的結(jié)果:
[E 190423 00:04:16 test:9] ZeroDivisionError: division by zero
Logging output
你可以在 logzero.readthedocs.io 中閱讀更多選項。
logzero 為教育而生
對于新手程序員來說,日志記錄可能是一個具有挑戰(zhàn)性的概念。大多數(shù)框架依賴于流控制和大量變量操作來生成有意義的日志,但是 logzero 不同。由于它的語法類似于 print 語句,因此它在教育上很成功,因為它無需解釋其他概念。在你的下個項目中試試它。




























