1. 程式人生 > >logging.basicConfig函式

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