使用 logzero 在 Python 中進行簡單日誌記錄
快速瞭解一個方便的日誌庫,來幫助你掌握這個重要的程式設計概念。
logzero 庫使日誌記錄就像列印語句一樣容易,是簡單性的傑出代表。我不確定 logzero 的名稱是否要與 pygame-zero、GPIO Zero 和 guizero 這樣的 “zero 樣板庫”契合,但是肯定屬於該類別。它是一個 Python 庫,可以使日誌記錄變得簡單明瞭。
你可以使用它基本的記錄到標準輸出的日誌記錄,就像你可以使用 print 來獲得資訊和除錯一樣,學習它的更高階日誌記錄(例如記錄到檔案)的學習曲線也很平滑。
首先,使用 pip 安裝 logzero:
$ sudo pip3 install logzero
在 Python 檔案中,匯入 logger 並嘗試以下一個或所有日誌例項:
from logzero import logger
logger.debug("hello")
logger.info("info")
logger.warning("warning")
logger.error("error")
輸出以易於閱讀的方式自動著色:
因此現在不要再使用 print
來了解發生了什麼,而應使用有相關日誌級別的日誌器。
在 Python 中將日誌寫入檔案
如果你閱讀至此,並會在你寫程式碼時做一點改變,這對我就足夠了。如果你要了解更多,請繼續閱讀!
寫到標準輸出對於測試新程式不錯,但是僅當你登入到執行指令碼的計算機時才有用。在很多時候,你需要遠端執行程式碼並在事後檢視錯誤。這種情況下,記錄到檔案很有幫助。讓我們嘗試一下:
from logzero import logger, logfile
logfile('/home/pi/test.log')
現在,你的日誌條目將記錄到檔案 test.log
中。記住確保指令碼有許可權寫入該檔案及其目錄結構。
你也可以指定更多選項:
logfile('/home/pi/test.log', maxBytes=1e6, backupCount=3)
現在,當提供給 test.log
檔案的資料達到 1MB(106 位元組)時,它將透過 test.log.1
、test.log.2
等檔案輪替寫入。這種行為可以避免系統開啟和關閉大量 I/O 密集的日誌檔案,以至於系統無法開啟和關閉。更專業一點,你或許還要記錄到 /var/log
。假設你使用的是 Linux,那麼建立一個目錄並將使用者設為所有者,以便可以寫入該目錄:
$ sudo mkdir /var/log/test
$ sudo chown pi /var/log/test
然後在你的 Python 程式碼中,更改 logfile
路徑:
logfile('/var/log/test/test.log', maxBytes=1e6, backupCount=3)
當要在 logfile
中捕獲異常時,可以使用 logging.exception
:
try:
c = a / b
except Exception as e:
logger.exception(e)
這將輸出(在 b
為零的情況下):
[E 190422 23:41:59 test:9] division by zero
Traceback (most recent call last):
File "test.py", line 7, in
c = a / b
ZeroDivisionError: division by zero
你會得到日誌,還有完整回溯。另外,你可以使用 logging.error
並隱藏回溯:
try:
c = a / b
except Exception as e:
logger.error(f"{e.__class__.__name__}: {e}")
現在,將產生更簡潔的結果:
[E 190423 00:04:16 test:9] ZeroDivisionError: division by zero
你可以在 logzero.readthedocs.io 中閱讀更多選項。
logzero 為教育而生
對於新手程式設計師來說,日誌記錄可能是一個具有挑戰性的概念。大多數框架依賴於流控制和大量變數操作來生成有意義的日誌,但是 logzero 不同。由於它的語法類似於 print
語句,因此它在教育上很成功,因為它無需解釋其他概念。在你的下個專案中試試它。
此文章最初發布在我的部落格上,經許可重新發布。
via: https://opensource.com/article/20/2/logzero-python
作者:Ben Nuttall 選題:lujun9972 譯者:geekpi 校對:wxy
相關文章
- Gin 框架 - 使用 logrus 進行日誌記錄框架
- 使用Log4j進行日誌記錄
- .Net Core中使用DiagnosticSource進行日誌記錄
- 在雲環境上使用SLF4J對Java程式進行日誌記錄Java
- 在oracle中Logmnr進行日誌挖掘Oracle
- 在Linux中,如何使用ELK進行日誌管理和分析?Linux
- [python] Python日誌記錄庫loguru使用指北Python
- Python多程式記錄日誌Python
- 記錄騰訊雲使用日誌
- php日誌,記錄日誌PHP
- Python:使用logging模組記錄日誌Python
- 使用配置檔案方式記錄Python程式日誌Python
- 一個簡單的 C# 非同步日誌記錄器C#非同步
- 使用shell進行日誌分析
- Cmocka 單元測試日誌記錄Mock
- python日誌記錄器的配置Python
- 使用Redis記錄系統日誌Redis
- 使用Rsyslog記錄Apache日誌Apache
- 使用 .NET Core 的日誌記錄
- 在myeclipse中使用log4j記錄日誌Eclipse
- 在java下使用log4j2記錄日誌Java
- mysql日誌系統簡單使用MySql
- 一種簡化操作日誌記錄方案
- C# 使用Log4Net記錄日誌(進階篇)C#
- controlfile的extend也會記錄在alert日誌中
- NAS中如何檢視日誌記錄?
- 在Golang中使用Zap實現結構化日誌記錄Golang
- 日誌記錄器
- .NET Core使用Nlog記錄日誌
- 簡單使用SLF4J日誌
- 在ORACLE中對線上重做日誌檔案進行調整Oracle
- .Net Core(.NET6)中接入Log4net和NLog進行日誌記錄
- 在日誌中記錄Java異常資訊的正確姿勢Java
- asp.net Web專案中使用Log4Net進行錯誤日誌記錄ASP.NETWeb
- 如何在專案中記錄日誌資訊?
- Swoft AOP 記錄使用者操作日誌
- Laravel sql 日誌記錄LaravelSQL
- secureCRT記錄操作日誌Securecrt