目錄
一、日志的基本應(yīng)用
1.log日志的直接創(chuàng)建和使用
2.traceback.format_exc()在日志的用法
二、日志的進(jìn)階使用
1.設(shè)置日志控制臺輸出
2.設(shè)置日志文件中輸出
三、配置文件設(shè)置與讀取
一、日志的基本應(yīng)用
1.log日志的直接創(chuàng)建和使用
在python運(yùn)行過程中,我們經(jīng)常使用print來作為輸出的方式。包括在調(diào)試和查看代碼運(yùn)行情況的時候。在自動化運(yùn)行時我們也不可能一直盯著電腦屏幕來看整體的運(yùn)行。就需要有一個模塊來專門記錄整個運(yùn)行過程,如果出現(xiàn)問題則直接記錄下來。于是乎就有了日志的模塊logging庫。
logging庫本身是Python自帶的官方庫之一。所以不需要下載直接調(diào)用就可以了。
1. 創(chuàng)建日志對象,進(jìn)行設(shè)置,日志等級是需要根據(jù)實際情況自行設(shè)置的。 2. 調(diào)用日志模塊來實現(xiàn)日志的輸出 from class09.logging_config import getLogger # logging庫的創(chuàng)建:設(shè)置日志的相關(guān)內(nèi)容 level=logging.DEBUG, # 設(shè)置日志的輸出默認(rèn)等級,不設(shè)置的情況下,默認(rèn)為warning等級 # 設(shè)置日志的格式信息:asctime表示當(dāng)前時間,levelname表示日志等級,filename表示運(yùn)行的py文件名稱,lineno表示行數(shù),message表示輸出信息 format='%(asctime)s %(levelname)s %(filename)s %(lineno)s:%(message)s', filename='./logfile/log.log', # 設(shè)置日志寫入文件的保存文件名稱及路徑,加入此設(shè)置則會在運(yùn)行時生成一個日志文件 # 日志文件的內(nèi)容寫入,默認(rèn)是以追加的方式來進(jìn)行寫入,也可以通過修改設(shè)置來改變寫入的模式,一般不改 # 日志輸出不同等級的內(nèi)容:debug < info < warning < error < critical logging.debug('這是debug的內(nèi)容') logging.info('這是info的內(nèi)容') logging.warning('這是warning的內(nèi)容') logging.error('這是erro的內(nèi)容') logging.critical('這是critical的內(nèi)容')
輸出效果如下:
log.log日志文件的顯示如下所示:
2.traceback.format_exc()在日志的用法
format='%(asctime)s %(message)s %(filename)s %(lineno)s %(levelname)s', filename='./file/log.log' logging.debug('這是debug的內(nèi)容') logging.info('這是info的內(nèi)容') logging.warning('這是warning的內(nèi)容') # traceback.format_exc()實現(xiàn)將異常信息寫入日志文件中。便于出錯后的調(diào)試。 # format_exc是生成異常信息的字符串內(nèi)容??梢詐rint也可以寫入文件。 logging.error(traceback.format_exc()) logging.critical('這是critical的內(nèi)容')
在日志中的顯示效果如下圖所示:
二、日志的進(jìn)階使用
logging的運(yùn)行都是基于4個組件來實現(xiàn)的。除去通過基本的調(diào)用以外,也可以直接調(diào)用組件來實現(xiàn)日志的記錄 1. logger:記錄器,提供基本的能夠被程序直接調(diào)用的接口 2. handler:處理器,提供將記錄器的內(nèi)容發(fā)送到目的地的作用 3. filter:過濾器,提供更好的粒度控制。 4. formatter:格式化器,設(shè)置日志的所有內(nèi)容的格式
1.設(shè)置日志控制臺輸出
設(shè)置方法如下:
# 通過logger創(chuàng)建一個記錄器 logger = logging.getLogger('zhp') logger.setLevel(logging.DEBUG) logger_format = logging.Formatter('%(levelname)s %(asctime)s %(filename)s %(lineno)s:%(message)s') stream_handler = logging.StreamHandler() logger.addHandler(stream_handler) logger.info('這是logger的info信息') logger.error('這是logger的erro信息')
輸出效果如下:
logger的格式不會生效,在哪里輸出就需要通過對應(yīng)位置的handler的格式設(shè)置才能生效。logger的等級設(shè)置也一樣。所以需要將定義的記錄器的格式賦值給到控制臺,代碼如下:
stream_handler.setFormatter(logger_format)
效果如下所示:
2.設(shè)置日志文件中輸出
# 通過logger創(chuàng)建一個記錄器 logger = logging.getLogger('hzp') logger.setLevel(logging.DEBUG) logger_format = logging.Formatter('%(levelname)s %(asctime)s %(filename)s %(lineno)s: %(message)s') stream_handler = logging.StreamHandler() stream_handler.setLevel(logging.INFO) stream_handler.setFormatter(logger_format) file_handler = logging.FileHandler(filename='./file/log1.log') file_handler.setLevel(logging.DEBUG) file_handler.setFormatter(logger_format) logger.addHandler(stream_handler) logger.addHandler(file_handler) logger.debug('這是logger的debug信息') logger.info('這是logger的info信息') logger.error('這是logger的error信息')
自動生成了log1.log日志文件,控制臺輸出的效果如下:
文件之中的效果如下:
三、配置文件設(shè)置與讀取
配置項是固定不需要修改的。 獲取配置項通過logging.config.fileConfig(配置文件)的方式獲取。
配置文件的內(nèi)容一定記得不要寫錯,不然會出現(xiàn)問題,其次不要寫入中文相關(guān)內(nèi)容,容易因為編碼格式造成報錯。
配置項文件,是log_conf.ini這樣的格式,具體內(nèi)容不需要大家去記,直接抄就行了,需要用的時候,直接復(fù)制過去調(diào)用即可,配置項文件如下:
keys = fileHandler,streamHandler handlers = fileHandler,streamHandler formatter = simpleFormatter args = ('log_conf.log','a','utf-8') formatter = simpleFormatter [formatter_simpleFormatter] format = %(levelname)s %(asctime)s %(filename)s %(module)s %(funcName)s %(lineno)s:%(message)s
讀取ini配置項,實現(xiàn)logging的配置與輸出,要讀取ini實現(xiàn)日志庫的配置, 則需要調(diào)用logging.config模塊
# 將日志記錄器封裝為函數(shù),如果需要,則直接調(diào)用,生成logger來進(jìn)行日志的記錄 logging.config.fileConfig('log_conf.ini') logger = logging.getLogger() logger.debug('這是debug信息') logger.warning('這是warning信息') logger.error('這是error信息')
|