Python不歸路_logging模塊
Logging模塊學習
1、Logging的五個等級
debug:診斷性的信息
info:確認一切按預期運行
warning:警告性信息,如CPU負載過高,硬盤空間少
error:更嚴重的事情,但系統還能運行
critical:系統無法繼續運行
這5個等級,也分別對應5種打日誌的方法: debug 、info 、warning 、error 、critical。默認的是WARNING,當在WARNING或之上時才被跟蹤。
2、將日誌輸出到屏幕
2.1簡單輸出
1 import logging 2 logging.warning(‘this is a warning message‘) 3logging.error(‘this is a error message‘) 4 5 #輸出 6 WARNING:root:this is a warning message 7 ERROR:root:this is a error message
只有WARNING或之上的才會輸出至屏幕。
2.2logging.basicConfig()函數輸出
1 logging.basicConfig(format=‘%(asctime)s %(message)s‘) 2 logging.warning(‘this is a warning message‘) 3 logging.error(‘this is a error message‘) 4 5 #輸出 6 7 2017-11-09 14:52:05,311 this is a warning message 8 2017-11-09 14:52:05,311 this is a error message
logging.basicConfig函數中,可以指定日誌的輸出格式format,這個參數可以輸出很多有用的信息:
%(levelno)s: 打印日誌級別的數值
%(levelname)s: 打印日誌級別名稱
%(pathname)s: 打印當前執行程序的路徑,其實就是sys.argv[0]
%(filename)s: 打印當前執行程序名
%(funcName)s: 打印日誌的當前函數
%(lineno)d: 打印日誌的當前行號
%(asctime)s: 打印日誌的時間
%(thread)d: 打印線程ID
%(threadName)s: 打印線程名稱
%(process)d: 打印進程ID
%(message)s: 打印日誌信息
常用的格式:
1 logging.basicConfig(format=‘%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s‘) 2 logging.warning(‘this is a warning message‘) 3 logging.error(‘this is a error message‘) 4 5 #輸出 6 7 2017-11-09 15:06:14,915 logging模塊.py[line:8] WARNING this is a warning message 8 2017-11-09 15:06:14,915 logging模塊.py[line:9] ERROR this is a error message
3、將日誌出輸出至文件
1 logging.basicConfig(level=logging.ERROR,format=‘%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s‘,filename=‘d:\\111.log‘,filemode=‘w‘) 2 logging.warning(‘this is a warning message‘) 3 logging.error(‘this is a error message‘) 4 with open(‘d:\\111.log‘,‘r‘) as f: 5 for lines in f.readlines(): 6 print(lines) 7 8 #輸出 9 10 2017-11-09 16:45:44,998 logging模塊.py[line:9] ERROR this is a error message
上面的代碼比2.2中新添加了日誌等級和文件存儲。’level = logging.INFO‘,‘filename=‘d:\\111.log‘,filemode=‘w‘’。
4、將日誌同時輸出至屏幕和文件
具體步驟
1 logger = logging.getLogger() 2 logger.setLevel(logging.DEBUG) #記錄日誌等級的總開關 3 4 logfile = ‘d:\\333.log‘ 5 fh = logging.FileHandler(logfile,mode=‘w‘) #文件存儲位置 6 fh.setLevel(logging.INFO) #記錄日誌等級 7 8 sh = logging.StreamHandler() #輸出屏幕 9 sh.setLevel(logging.WARNING) #記錄日誌等級 10 11 geshi = logging.Formatter(‘%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s:%(message)s‘) #日誌輸出格式 12 fh.setFormatter(geshi) 13 sh.setFormatter(geshi) 14 15 logger.addHandler(sh) #添加Handler 16 logger.addHandler(fh) 17 18 19 logger.info(‘this is a INFO message‘) 20 logger.warning(‘this is a WARNING message‘) 21 logger.debug(‘this is a DEBUG message‘) 22 23 24 輸出 25 26 2017-11-10 11:40:00,035 - logging模塊.py[line:34] - WARNING:this is a WARNING message
handler對象負責發送相關的信息到指定目的地。Python的日誌系統有多種Handler可以使用。有些Handler可以把信息輸出到控制臺,有些Logger可以把信息輸出到文件,還有些 Handler可以把信息發送到網絡上。如果覺得不夠用,還可以編寫自己的Handler。可以通過addHandler()方法添加多個多handler。比如上面代碼中輸出至文件FileHandler()和標準輸出SteamHandler()。
Python不歸路_logging模塊