天天看點

Selenium3+python自動化012+日志logging基本用法、進階用法

1.關鍵字:

  login 登入

  log 日志

  logging python日志子產品

2.什麼叫日志:

日志用來記錄使用者行為或者代碼的執行過程

3.日志使用的地方:

  1.排錯的時候需要列印很多細節來幫助排錯

  2.有一些使用者行為,有沒有錯都要記錄下來(背景)

  3.嚴重的錯誤記錄下來

4.logging子產品的日志級别,總開關小于分開發以總開關為準,總開關大于分開關以分開關為準。

Selenium3+python自動化012+日志logging基本用法、進階用法

兩種書寫格式:

格式一:

Selenium3+python自動化012+日志logging基本用法、進階用法

格式二:

Selenium3+python自動化012+日志logging基本用法、進階用法

 日志輸出

Selenium3+python自動化012+日志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)

Selenium3+python自動化012+日志logging基本用法、進階用法
Selenium3+python自動化012+日志logging基本用法、進階用法
Selenium3+python自動化012+日志logging基本用法、進階用法

執行個體2:

Selenium3+python自動化012+日志logging基本用法、進階用法
Selenium3+python自動化012+日志logging基本用法、進階用法

第一個例子,預設級别為warning

Selenium3+python自動化012+日志logging基本用法、進階用法

第二個例子,設定日志級别

Selenium3+python自動化012+日志logging基本用法、進階用法

第三個例子,輸出日志格式化

Selenium3+python自動化012+日志logging基本用法、進階用法

第四個例子,輸出到檔案

 有了filename參數就不會直接輸出到控制台,而是寫入檔案,如下圖

Selenium3+python自動化012+日志logging基本用法、進階用法
Selenium3+python自動化012+日志logging基本用法、進階用法

第五個例子,輸出到檔案(二)

Selenium3+python自動化012+日志logging基本用法、進階用法
Selenium3+python自動化012+日志logging基本用法、進階用法

第六個例子,寫入到檔案,同時将錯誤資訊輸出到控制台

 logging子產品講解

Selenium3+python自動化012+日志logging基本用法、進階用法
Selenium3+python自動化012+日志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路徑

Selenium3+python自動化012+日志logging基本用法、進階用法
Selenium3+python自動化012+日志logging基本用法、進階用法
Selenium3+python自動化012+日志logging基本用法、進階用法
Selenium3+python自動化012+日志logging基本用法、進階用法
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')      

日志輸入到檔案和控制台