1. 等級
日誌等級(level) |
描述 |
DEBUG |
最詳細的日誌信息,典型應用場景是 問題診斷 |
INFO |
信息詳細程度僅次於DEBUG,通常只記錄關鍵節點信息,用於確認一切都是按照我們預期的那樣進行工作 |
WARNING |
當某些不期望的事情發生時記錄的信息(如,磁盤可用空間較低),但是此時應用程序還是正常運行的 |
ERROR |
由於一個更嚴重的問題導致某些功能不能正常運行時記錄的信息 |
CRITICAL |
當發生嚴重錯誤,導致應用程序不能繼續運行時記錄的信息 |
- 日誌等級是從上到下依次升高的,即:
DEBUG < INFO < WARNING < ERROR < CRITICAL
,而日誌的信息量是依次減少的
- 當指定日誌級別後,應用程序會記錄所有日誌級別大於或等於指定日誌級別的日誌信息
2. 記錄格式
- 事件發生時間
- 事件發生位置
- 事件的嚴重程度--日誌級別
- 事件內容
3. logging模塊
常用logging模塊用以記錄日誌
函數 |
說明 |
logging.debug(msg, *args, **kwargs) |
創建一條嚴重級別爲DEBUG的日誌記錄 |
logging.info(msg, *args, **kwargs) |
創建一條嚴重級別爲INFO的日誌記錄 |
logging.warning(msg, *args, **kwargs) |
創建一條嚴重級別爲WARNING的日誌記錄 |
logging.error(msg, *args, **kwargs) |
創建一條嚴重級別爲ERROR的日誌記錄 |
logging.critical(msg, *args, **kwargs) |
創建一條嚴重級別爲CRITICAL的日誌記錄 |
logging.log(level, *args, **kwargs) |
創建一條嚴重級別爲level的日誌記錄 |
logging.basicConfig(**kwargs) |
對root logger進行一次性配置 |
I. logging.basicConfig()
函數說明
該方法用於爲logging
日誌系統做一些基本配置
logging.basicConfig(**kwargs)
-
logging.basicConfig()
函數是一個一次性的簡單配置工具使,也就是說只有在第一次調用該函數時會起作用,後續再次調用該函數時完全不會產生任何操作的。
參數名稱 |
描述 |
filename |
指定日誌輸出目標文件的文件名,指定該設置項後日志信心就不會被輸出到控制檯了 |
filemode |
指定日誌文件的打開模式,默認爲'a'。需要注意的是,該選項要在filename指定時纔有效 |
format |
指定日誌格式字符串,即指定日誌輸出時所包含的字段信息以及它們的順序。logging模塊定義的格式字段下面會列出。 |
datefmt |
指定日期/時間格式。需要注意的是,該選項要在format中包含時間字段%(asctime)s時纔有效 |
level |
指定日誌器的日誌級別 |
stream |
指定日誌輸出目標stream,如sys.stdout、sys.stderr以及網絡stream。需要說明的是,stream和filename不能同時提供,否則會引發 ValueError異常 |
style |
Python 3.2中新添加的配置項。指定format格式字符串的風格,可取值爲'%'、'{'和'$',默認爲'%' |
handlers |
Python 3.3中新添加的配置項。該選項如果被指定,它應該是一個創建了多個Handler的可迭代對象,這些handler將會被添加到root logger。需要說明的是:filename、stream和handlers這三個配置項只能有一個存在,不能同時出現2個或3個,否則會引發ValueError異常。 |
II. logging
模塊定義的格式字符串字段
字段/屬性名稱 |
使用格式 |
描述 |
asctime |
%(asctime)s |
日誌事件發生的時間--人類可讀時間,如:2003-07-08 16:49:45,896 |
created |
%(created)f |
日誌事件發生的時間--時間戳,就是當時調用time.time()函數返回的值 |
relativeCreated |
%(relativeCreated)d |
日誌事件發生的時間相對於logging模塊加載時間的相對毫秒數(目前還不知道幹嘛用的) |
msecs |
%(msecs)d |
日誌事件發生事件的毫秒部分 |
levelname |
%(levelname)s |
該日誌記錄的文字形式的日誌級別('DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL') |
levelno |
%(levelno)s |
該日誌記錄的數字形式的日誌級別(10, 20, 30, 40, 50) |
name |
%(name)s |
所使用的日誌器名稱,默認是'root',因爲默認使用的是 rootLogger |
message |
%(message)s |
日誌記錄的文本內容,通過 msg % args計算得到的 |
pathname |
%(pathname)s |
調用日誌記錄函數的源碼文件的全路徑 |
filename |
%(filename)s |
pathname的文件名部分,包含文件後綴 |
module |
%(module)s |
filename的名稱部分,不包含後綴 |
lineno |
%(lineno)d |
調用日誌記錄函數的源代碼所在的行號 |
funcName |
%(funcName)s |
調用日誌記錄函數的函數名 |
process |
%(process)d |
進程ID |
processName |
%(processName)s |
進程名稱,Python 3.1新增 |
thread |
%(thread)d |
線程ID |
threadName |
%(thread)s |
線程名稱 |
4. 使用示例
def __init__(self, filename):
self.filename = filename
self.log_filename = 'logs/' + self.filename
logging.basicConfig(filename=self.log_filename + '.txt', filemode='a+',
level=logging.DEBUG, format="%(asctime)s - %(levelname)s - %(message)s "
, datefmt="%m/%d/%Y %H:%M:%S %p")
logging.info("FILENAME:%s " % self.filename)
logging.info("*********************************************")