許多應用程序中都會有日誌模塊,用於記錄系統運行過程中的一些關鍵信息,以便對系統的運行狀況進行跟蹤。在.NET平臺有著名的第三方開源日誌組建log4net,C++中有log4cpp,Java中有log4j,在python中有logging。本模塊支持將日誌信息保存到不同的目標域中。如保存到日誌文件中,以郵件形式發送日誌信息;以httpget或者post的方式提交日誌到web服務器;以windows事件的形式記錄等等,這些日誌保存方式可以組合使用,每種方式可以設置自己的日誌級別以及日誌格式。
1、四個主要的組件
logger:日誌類,應用程序往往通過調用它提供的API來記錄日誌;
handler:對日誌信息處理,可以將日誌發送(保存)到不同的目標域中;
filter:對日誌信息進行過濾;
formatter:日誌的格式化。
2、日誌級別
在記錄日誌時,日誌消息都會關聯一個級別(本質是一個非負整數),系統默認提供了6個級別,分別是:
CRITICAL 50
ERROR 40
WARNING 30
INFO 20
DEBUG 10
NOTSET 0
可以給日誌對象(Logger Instance)設置日誌級別,低於該級別的日誌消息將會被忽略,也可以給Handler設置日誌級別,低於該級別的日誌信息,Handler也會忽略。
logging模塊中的常用函數:
logging.basicConfig(參數)
作用是爲日誌模塊設置基本信息。後面參數有:
1)filename:日誌文件的目錄全稱,也就是包含有準確路徑的文件名。如filename="/home/log/log1.txt",最後會把日誌信息打到此文件中。
2)filemode:日誌文件的打開模式,默認是'a',表示日誌消息以追加的形式添加到日誌文件中。如果設置成'w',那麼每次程序啓動的時候都會創建一個新的日誌文件。
3)format:設置日誌輸出格式。
4)datefmt:設置日期格式。
5)level:設置日誌的級別,對於低於該級別的日誌消息將會忽略。如level=logging.INFO。
6)stream:設置特定的流用於初始化StreamHandle。
例子:
- import logging
- LOG_FILENAME = "e:\log_test.txt"
- logging.basicConfig(filename=LOG_FILENAME, level=logging.DEBUG)
- logging.debug("This message should go to the log file")
運行結果:
再運行一次
可以看出運行的日誌都寫到這個日誌文件中了,每運行一次就會多一行。如果在filename和level中間插入filemode='w',那麼每次運行日誌文件中只有一行。這個在調試腳本的時候很有用,每次日誌裏的信息都是本次運行的過程,每改一次腳本就有一個新日誌,那麼把每次運行的日誌文件拿到一起對比一下就能看出每次的改動到底有沒有效果。
假如設置level=logging.WARNING,需要打印的消息有
logging.error("......")
logging.warning("......")
logging.info("......")
logging.debug("......")
那麼運行的時候只有前兩句會被打印,後面的不打印,因爲它們的級別低於WARNING。