1.關鍵字:
login 登入
log 日志
logging python日志子產品
2.什麼叫日志:
日志用來記錄使用者行為或者代碼的執行過程
3.日志使用的地方:
1.排錯的時候需要列印很多細節來幫助排錯
2.有一些使用者行為,有沒有錯都要記錄下來(背景)
3.嚴重的錯誤記錄下來
4.logging子產品的日志級别,總開關小于分開發以總開關為準,總開關大于分開關以分開關為準。
兩種書寫格式:
格式一:
格式二:
日志輸出
上面清單中的日志等級是從上到下依次升高的,即:DEBUG < INFO < WARNING < ERROR < CRITICAL,而日志的資訊量是依次減少的;
問題:
問題1:為什麼前面兩條日志沒有被列印出來?
這是因為logging子產品提供的日志記錄函數所使用的日志器設定的日志級别是WARNING,是以隻有WARNING級别的日志記錄以及大于它的ERROR和CRITICAL級别的日志記錄被輸出了,而小于它的DEBUG和INFO級别的日志記錄被丢棄了。
問題2:預設列印出來的日志資訊中各字段表示什麼意思?為什麼會這樣輸出?
上面輸出結果中每行日志記錄的各個字段含義分别是:日志級别:日志器名稱:日志内容
問題3:怎麼修改logging這些預設設定呢?
其實很簡單,在我們調用上面這些日志記錄函數之前,手動調用一下basicConfig()方法,把我們想設定的内容以參數的形式傳遞進去就可以了。
5. logging.basicConfig()函數
該方法用于為logging日志系統做一些基本配置文法:logging.basicConfig(**kwargs)
執行個體2:
第一個例子,預設級别為warning
第二個例子,設定日志級别
第三個例子,輸出日志格式化
第四個例子,輸出到檔案
有了filename參數就不會直接輸出到控制台,而是寫入檔案,如下圖
第五個例子,輸出到檔案(二)
第六個例子,寫入到檔案,同時将錯誤資訊輸出到控制台
logging子產品講解
1 import logging
2 import time
3 import os
4
5 class LoggingMethod():
6 # 建立方法
7 def getlogger(self):
8 logger = logging.getLogger()
9 logger.setLevel(logging.INFO)# Log等級總開關
10
11 now=time.strftime('%Y-%m-%d_%H_%M_%S')
12 filename=os.path.dirname(os.path.abspath('.')) + '\\log\\' + now + '.log'
13 # 建立一個handler,用于寫入日志檔案
14 fh = logging.FileHandler(filename)#mode='a'預設以追加的形式寫入檔案,如果想清空重寫用“mode='w'”
15 fh.setLevel(logging.INFO) # 輸出到file的log等級的開關
16
17 # 定義handler的輸出格式
18 formatter = logging.Formatter("%(asctime)s - %(name)s-%(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s")
19
20 fh.setFormatter(formatter)
21 # 将FileHandler對象添加到handler裡面
22 logger.addHandler(fh)
23
24 return logger
25
26 if __name__=='__main__':
27 logger=LoggingMethod().getlogger()
28
29 # 日志
30 logger.debug('debug message')
31 logger.info('info message')
32 logger.warning('warning message')
33 logger.error('error message')
34 logger.critical('critical message')
LoggingMethod
設定log路徑
1 import logging
2 import time
3 import os
4
5 # 同一天的所有日志輸入到同一個log檔案
6 class LoggingMethod():
7 def getlogger(self):
8 # 設定存儲日志的檔案名
9 now = time.strftime('%Y-%m-%d')
10 filename = os.path.dirname(os.path.abspath('.')) + '\\log\\' + now + '.log'
11 err_filename=os.path.dirname(os.path.abspath('.')) + '\\log\\' + now+'-error' + '-' + '.log'
12 # 第一步,建立一個logger
13 logger = logging.getLogger()#執行個體化logger對象
14 logger.setLevel(logging.DEBUG) # Log等級總開關
15 # 第二步,建立一個handler,用于寫入所有日志
16 fh1 = logging.FileHandler(filename,encoding='utf-8')
17 fh1.setLevel(logging.DEBUG) # 輸出到file的log等級的開關
18 # 建立一個handler,用于寫入錯誤日志
19 fh2 = logging.FileHandler(err_filename,encoding='utf-8')
20 fh2.setLevel(logging.WARNING) # 輸出到file的log等級的開關
21 # 第三步,定義handler的輸出格式
22 formatter = logging.Formatter('%(asctime)s - %(levelname)s -%(pathname)s-%(lineno)d'+'行'+'- %(message)s')
23 fh1.setFormatter(formatter)
24 fh2.setFormatter(formatter)
25 # 第四步,将handlers 添加到 logger
26 logger.addHandler(fh1)
27 logger.addHandler(fh2)
28
29 return logger
30 if __name__=='__main__':
31 logger = LoggingMethod().getlogger()
32 logger.info('測試info日志')
33 logger.error('error')
日志輸入到檔案和控制台