如果說最方便且偷懶的對程式進行除錯訊息的記錄是 print() 的話,那麼我的建議是-「如果你正在使用最方便且偷懶的方法,而且知道這種方式不好的話,那麼請花費一點點時間看完這篇文章;如果你早已經像喝水一樣自然地使用 logging 模組的話,可以不需要在閱讀此篇文章」

學會使用 logging 模組的好處,並非是要將 print() 完全從程式中除去,而是希望對程式產生的訊息進行分層控管,甚至能夠針對不同級別的訊息進行過濾、處理與通知,例如 log 出現 critical 級別的訊息時,我們真的很希望第一時間得到通知,那麼使用 logging 模組並且實作自己對於 critical log 的處理器(handler),真的是 Z>B 。

logging 最簡單的使用方式,在 Cory 所分享的 A Brief Digression About Loggin
這篇文章中就已經寫得十分清楚了。

依照 Cory 的方式,如果是希望在模組中使用 logging 模組的話:

在模組中的 __init__.py 中加入以下程式碼:

import logging
logging.getLogger(__name__).addHandler(logging.NullHandler())

在模組中其他程式第一行加上以下程式碼。

log = logging.getLogger(__name__)

依照需求自行添加 log.debug() , log.info() , log.warning() , log.error() , log.critical() 5 種級別的 log 記錄方法。

不過需要注意的是,預設這些 log 訊息是沒有被開啟的,因此 Cory 又描述了如何打開這些訊息的方法,即在你的主程式中加入以下程式開啟將 log 顯示的功能(可依照級別需求進行修改,例如將 logging.DEBUG 修改為 logging.INFO )。

import logging
logging.basicConfig(level=logging.DEBUG)

或者可以將上述 log 顯示方式改為記錄到檔案之中( logging.basicConfig(level=logging.DEBUG, filename='debug.log') )。

以上就是 Cory 提供的簡單方法,如果對其他使用方式有興趣的話,可以再看看官方文件尋找更多用法。

參考資料:

https://docs.python.org/2/library/logging.html

https://lukasa.co.uk/2014/05/A_Brief_Digression_About_Logging/