Python Logging

Python Logging 模組,算是一套設計良好的訊息傳遞系統。

你可以在自己的 Python 程式的任意位置寫上一行 logging.info(…) 或 logging.debug(…) ,而不用理它這些訊息怎麼被播送,反正到時候,看到整個程式的訊息都印不出來,你會先有一陣子犯著頭疼去解決它的問題。

沒錯,我就覺得 Python Logging 這一點很機車:你可以很簡單地讓訊息印出來,可是,也可以很簡單地突然在某個錯誤的舉動之後,讓訊息都不印出來。最近我突然遭遇了訊息印不出來的情況,情下概略敘述如下:

我先有一個模組 logging.py ,內容寫著:

import logging
import mydefault as Default

def _config(fmt): logging.basicConfig(format= fmt)

_config(Default.FMT)
logging.debug(‘hello’)

這種程式在 Python REPL 內 import logging 的運作正常。可是,讓系統其他模組 import 之後,系統運行時就不會印出訊息。

我隨便猜測,猜測是跟其他模組也做了 logging.basicConfig(…) 動作加起來,總共 basicConfig 的二次以上,而破壞了訊息的運作。

後來,我把 logging.py 模組尾端直接執行 _config(Default.FMT) 刪掉,並且,調整系統讓唯有 __name__ == ‘__main__’ 的程式執行一次 _config(Default.FMT) ,才使訊息恢復印出。

廣告

About 黃耀賢 (Yau-Hsien Huang)

熱愛 Erlang ,並且有相關工作經驗。喜歡程式語言。喜歡邏輯。目前用 Python 工作。
本篇發表於 Uncategorized。將永久鏈結加入書籤。