Linux中國

使用 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")

輸出以易於閱讀的方式自動著色:

![Python, Raspberry Pi: import logger](/data/attachment/album/202003/07/122501cc71omhll74kmk14.png "Python, Raspberry Pi: import logger")

因此現在不要再使用 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(10 6 位元組)時,它將通過 test.log.1test.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

![Logging output](/data/attachment/album/202003/07/122520irsp3rnh6nurksh0.png "Logging output")

你可以在 logzero.readthedocs.io 中閱讀更多選項。

logzero 為教育而生

對於新手程序員來說,日誌記錄可能是一個具有挑戰性的概念。大多數框架依賴於流控制和大量變數操作來生成有意義的日誌,但是 logzero 不同。由於它的語法類似於 print 語句,因此它在教育上很成功,因為它無需解釋其他概念。在你的下個項目中試試它。

此文章最初發布在我的博客上,經許可重新發布。

via: https://opensource.com/article/20/2/logzero-python

作者:Ben Nuttall 選題:lujun9972 譯者:geekpi 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的電子郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國