logging 是 Python 內建的 log 紀錄器,可以利用這個模組來進行各種不同程度的 log 輸出,這樣可以省去程式開發完後一個一個把偵錯用的 print() 刪除的時間,直接把Debug level改成 INFO 以上就可以了,若要維護程式也可以再改回 DEBUG,但我每次都會忘記語法,於是來記錄一下順便和大家分享~

  Using Python 3.8.3  

引用套件

引入套件直接 import 即可 不用另外下載
import logging

Logging debug 等級

logging 把 debug level 分成六個等級,如下表所列,對應數值越小越敏感,logging只會紀錄數值大於設定值的紀錄。

type(logging.DEBUG) 查看會發現等級其實是 int 型別,也就是它只是別名,實際上print(logging.DEBUG) 也會是顯示10。

logging LEVEL 意義 對應數值
NOTSET 未設定 0
DEBUG 偵錯 10
INFO 通知 20
WARNING 警告 30
ERROR 錯誤 40
CRITICAL 嚴重錯誤 50

   

logging.DEBUG 的數值與型別

1
2
3
4
5
6
7
8
In [23]: print(logging.DEBUG)
10

In [24]: type(logging.DEBUG)
Out[24]: int

In [25]: logging.getLevelName(10)
Out[25]: 'DEBUG'

修改等級方法

在程式中指定偵錯等級的語法
logging.getLogger().setLevel(logging.LEVEL)

初始設定

logging.basicConfig(level=logging.INFO)

官方文件參數說明

Format Description
filename 指定 FileHandler,使用特定的檔案進行記錄而不是用 StreamHandler.
filemode 如果有指定 filename,則可用此參數指定開檔模式,預設是 'a'.
format 指定 handler 的格式字串
datefmt 指定日期/時間格式, 接受time.strftime()格式
style If format is specified, use this style for the format string. One of '%', '{' or '$' for printf-style, str.format() or string.Template respectively. Defaults to '%'.
level Set the root logger level to the specified level.
stream Use the specified stream to initialize the StreamHandler. Note that this argument is incompatible with filename - if both are present, a ValueError is raised.
handlers If specified, this should be an iterable of already created handlers to add to the root logger. Any handlers which don’t already have a formatter set will be assigned the default formatter created in this function. Note that this argument is incompatible with filename or stream - if both are present, a ValueError is raised.
force If this keyword argument is specified as true, any existing handlers attached to the root logger are removed and closed, before carrying out the configuration as specified by the other arguments.