介面自動化之實現日誌記錄封裝

帥袁發表於2022-01-06

一:參考官方文件:

 

二:日誌的級別:

日誌記錄級別的數值在下表中給出。如果你想要定義自己的級別,並且需要它們具有相對於預定義級別的特定值,那麼這你可能對以下內容感興趣。如果你定義具有相同數值的級別,它將覆蓋預定義的值;預定義的名稱將失效。

 

 

在工作中常用的日誌級別:

 

三:基本使用

import logging

logging.debug("this is debug。。。")

logging.info('this is info ....')

logging.warning('this is warning....')

 

 

 

 

預設logging記錄日誌的級別為 warning級別。也就是說當級別為warning 或者比warning級別更高的時候,才會顯示
 

四:配置日誌級別

import logging
# 設定日誌級別為 DEBUG
logging.basicConfig(level=logging.DEBUG)

logging.debug("this is debug。。。")

logging.info('this is info ....')

logging.warning('this is warning....')

 

 

 

預設日誌列印在控制檯,也可以將日誌的儲存到檔案當中。

import logging
# 設定日誌級別為 DEBUG ,檔名為my.log 檔案模式為追加模式
logging.basicConfig(level=logging.DEBUG,filename='my.log',filemode='a',encoding='utf8')

logging.debug("this is debug。。。")
logging.info('this is info ....')
logging.warning('this is warning....')

 

 

 

如果配置到檔案中,那麼命令列就不再輸出列印資訊。

 

五:配置同時控制檯和檔案中列印

 

在專案中 應該是將日誌同時輸出到控制檯以及在檔案中列印。

配置日誌格式

 

屬性名稱

格式

描述

args

此屬性不需要使用者進行格式化。

合併到 msg 以產生 message 的包含引數的元組,或是其中的值將被用於合併的字典(當只有一個引數且其型別為字典時)。

asctime

%(asctime)s

表示 LogRecord 何時被建立的供人檢視時間值。 預設形式為 '2003-07-08 16:49:45,896' (逗號之後的數字為時間的毫秒部分)。

created

%(created)f

LogRecord 被建立的時間(即 time.time() 的返回值)。

exc_info

此屬性不需要使用者進行格式化。

異常元組(例如 sys.exc_info)或者如未發生異常則為 None

檔名

%(filename)s

pathname 的檔名部分。

funcName

%(funcName)s

函式名包括呼叫日誌記錄.

levelname

%(levelname)s

訊息文字記錄級別('DEBUG''INFO''WARNING''ERROR''CRITICAL')。

levelno

%(levelno)s

訊息數字的記錄級別 (DEBUGINFOWARNINGERRORCRITICAL).

lineno

%(lineno)d

發出日誌記錄呼叫所在的源行號(如果可用)。

message

%(message)s

記入日誌的訊息,即 msg args 的結果。 這是在發起呼叫 Formatter.format() 時設定的。

module -- 模組

%(module)s

模組 (filename 的名稱部分)。

msecs

%(msecs)d

LogRecord 被建立的時間的毫秒部分。

msg

此屬性不需要使用者進行格式化。

在原始日誌記錄呼叫中傳入的格式字串。 與 args 合併以產生 message,或是一個任意物件 (參見 使用任意物件作為訊息)。

名稱

%(name)s

用於記錄呼叫的日誌記錄器名稱。

pathname

%(pathname)s

發出日誌記錄呼叫的原始檔的完整路徑名(如果可用)。

process

%(process)d

程式ID(如果可用)

processName

%(processName)s

程式名(如果可用)

relativeCreated

%(relativeCreated)d

以毫秒數表示的 LogRecord 被建立的時間,即相對於 logging 模組被載入時間的差值。

stack_info

此屬性不需要使用者進行格式化。

當前執行緒中從堆疊底部起向上直到包括日誌記錄呼叫並引發建立當前記錄堆疊幀建立的堆疊幀資訊(如果可用)。

thread

%(thread)d

執行緒ID(如果可用)

threadName

%(threadName)s

執行緒名(如果可用)

 
 

通過使用檔案處理器和控制檯處理器進行操作。

 

import logging

# 設定名字
logger = logging.getLogger("某專案的日誌")
# 設定級別
logger.setLevel(logging.DEBUG)

# 配置格式化樣式  文字內容格式
formater = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s: %(message)s')

# 新增控制檯處理器
ls = logging.StreamHandler()
ls.setLevel(logging.DEBUG)
# 設定格式
ls.setFormatter(formater)
# 控制檯處理器新增到logger中
logger.addHandler(ls)

# 新增檔案處理器
import os
import time
logsdir = os.path.join( os.path.dirname( os.path.dirname(__file__)),'logs')
# 日誌目錄定義
if not os.path.exists(logsdir):
    os.mkdir(logsdir)
# 日誌檔案 以當時執行的日誌格式
logfile = os.path.join(logsdir,time.strftime('%Y_%m_%d')+'.log')
lf = logging.FileHandler(filename=logfile,encoding='utf8')
lf.setLevel(logging.DEBUG)
lf.setFormatter(formater)
# 檔案處理器新增到日誌當中
logger.addHandler(lf)

logger.debug('this is debug')

 

 

 

 

 

某專案的日誌

相關文章