logging.basicConfig函式
在UI自動化應用中,經常會出錯,打log就是一個很重要的環節,python的logging.basicConfig函式 真是既方便,又簡單,每次貼上到用例前,就可以打log了。
logging模組是Python內建的標準模組,主要用於輸出執行日誌,可以設定輸出日誌的等級、日誌儲存路徑、日誌檔案回滾等。
相比print,具備如下優點:
可以通過設定不同的日誌等級,在release版本中只輸出重要資訊,而不必顯示大量的除錯資訊;
print將所有資訊都輸出到標準輸出中,嚴重影響開發者從標準輸出中檢視其它資料;logging則可以由開發者決定將資訊輸出到什麼地方,以及怎麼輸出;
在python中,logging由logger,handler,filter,formater四個部分組成:
logger是提供我們記錄日誌的方法;handler是讓我們選擇日誌的輸出地方,如:控制檯,檔案,郵件傳送等,一個logger新增多個handler;filter是給使用者提供更加細粒度的控制日誌的輸出內容;formater使用者格式化輸出日誌的資訊。
python中配置logging有三種方式
第一種:基礎配置,logging.basicConfig(filename="config.log",filemode="w",format="%(asctime)s-%(name)s-%(levelname)s-%(message)s",level=logging.INFO)。
第二種:使用配置檔案的方式配置logging,使用fileConfig(filename,defaults=None,disable_existing_loggers=Ture )函式來讀取配置檔案。
第三種:使用一個字典方式來寫配置資訊,然後使用dictConfig(dict,defaults=None, disable_existing_loggers=Ture )函式來瓦按成logging的配置.
一 、level
日誌一共分成5個等級,從低到高分別是:DEBUG ,INFO ,WARNING ,ERROR, CRITICAL。
DEBUG:詳細的資訊,通常只出現在診斷問題上
INFO:確認一切按預期執行
WARNING:一個跡象表明,一些意想不到的事情發生了,或表明一些問題在不久的將來(例如。磁碟空間低”)。這個軟體還能按預期工作。
ERROR:更嚴重的問題,軟體沒能執行一些功能
CRITICAL:一個嚴重的錯誤,這表明程式本身可能無法繼續執行
這5個等級,也分別對應5種打日誌的方法: debug 、info 、warning 、error 、critical。預設的是WARNING,當在WARNING或之上時才被跟蹤。
二、日誌輸出:可以輸出在控制檯和檔案,我選擇的是輸出在檔案
StreamHandler:logging.StreamHandler;日誌輸出到流,可以是sys.stderr,sys.stdout或者檔案
FileHandler:logging.FileHandler;日誌輸出到檔案
BaseRotatingHandler:logging.handlers.BaseRotatingHandler;基本的日誌回滾方式
RotatingHandler:logging.handlers.RotatingHandler;日誌回滾方式,支援日誌檔案最大數量和日誌檔案回滾
日誌回滾的意思為:比如日誌檔案是chat.log,當chat.log達到指定的大小之後,RotatingFileHandler自動把檔案改名為chat.log.1。不過,如果chat.log.1已經存在,會先把chat.log.1重新命名為chat.log.2。最後重新建立 chat.log,繼續輸出日誌資訊。【這樣保證了chat.log裡面是最新的日誌】
TimeRotatingHandler:logging.handlers.TimeRotatingHandler;日誌回滾方式,在一定時間區域內回滾日誌檔案
SocketHandler:logging.handlers.SocketHandler;遠端輸出日誌到TCP/IP sockets
DatagramHandler:logging.handlers.DatagramHandler;遠端輸出日誌到UDP sockets
SMTPHandler:logging.handlers.SMTPHandler;遠端輸出日誌到郵件地址
SysLogHandler:logging.handlers.SysLogHandler;日誌輸出到syslog
NTEventLogHandler:logging.handlers.NTEventLogHandler;遠端輸出日誌到Windows NT/2000/XP的事件日誌
MemoryHandler:logging.handlers.MemoryHandler;日誌輸出到記憶體中的指定buffer
HTTPHandler:logging.handlers.HTTPHandler;通過"GET"或者"POST"遠端輸出到HTTP伺服器
三、日誌格式說明
logging.basicConfig函式中,可以指定日誌的輸出格式format,這個引數可以輸出很多有用的資訊,如上例所示:
》》logging.basicConfig函式各引數:
filename: 指定日誌檔名
filemode: 和file函式意義相同,指定日誌檔案的開啟模式,'w'或'a'
format: 指定輸出的格式和內容,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: 列印日誌資訊
datefmt: 指定時間格式,同time.strftime()
level: 設定日誌級別,預設為logging.WARNING
stream: 指定將日誌的輸出流,可以指定輸出到sys.stderr,sys.stdout或者檔案,預設輸出到sys.stderr,當stream和filename同時指定時,stream被忽略
》》logging列印資訊函式:
logging.debug('This is debug message')
logging.info('This is info message')
logging.warning('This is warning message')
我在工作中給的常用格式在前面已經看到了。就是:
format='%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s'
這個格式可以輸出日誌的列印時間,是哪個模組輸出的,輸出的日誌級別是什麼,以及輸入的日誌內容。
例項程式碼:
# 初始化日誌物件
logging.basicConfig(
# 日誌級別
level = logging.INFO,
# 日誌格式
# 時間、程式碼所在檔名、程式碼行號、日誌級別名字、日誌資訊
format = '%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
# 列印日誌的時間
datefmt = '%a, %d %b %Y %H:%M:%S',
# 日誌檔案存放的目錄(目錄必須存在)及日誌檔名
filename = 'd:/report.log',
# 開啟日誌檔案的方式
filemode = 'w'
)
---------------------
作者:echo6120
來源:CSDN
原文:https://blog.csdn.net/qq_30758629/article/details/80840230