python logging模塊學(xué)習(xí)

logging模塊當(dāng)中,記錄到log的信息等級劃分:從低到高

調(diào)試(debug)、信息(info)、警告(warning)、錯誤(error)和嚴(yán)重錯誤(critical)

logging模塊提供了兩種記錄日志的方式:

第一種:使用logging提供的模塊級別的函數(shù),默認(rèn)級別是warning

使用logging的basicConfig函數(shù)能夠進行一些常用的設(shè)置,如日志等級,輸入信息,日志文件路徑等。

logging.basicConfig()函數(shù)參數(shù)說明

filename 指定日志輸出目標(biāo)文件的文件名(可以寫文件名也可以寫文件的完整的絕對路徑,寫文件名日志放執(zhí)行文件目錄下,寫完整路徑按照完整路徑生成日志文件),指定該設(shè)置項后日志信心就不會被輸出到控制臺了

filemode 指定日志文件的打開模式,默認(rèn)為'a'。需要注意的是,該選項要在filename指定時才有效

format 指定日志格式字符串,即指定日志輸出時所包含的字段信息以及它們的順序。logging模塊定義的格式字段下面會列出。

datefmt 指定日期/時間格式。需要注意的是,該選項要在format中包含時間字段%(asctime)s時才有效

level 指定日志器的日志級別

stream 指定日志輸出目標(biāo)stream,如sys.stdout、sys.stderr以及網(wǎng)絡(luò)stream。需要說明的是,stream和filename不能同時提供,否則會引發(fā)?ValueError異常

style? Python 3.2中新添加的配置項。指定format格式字符串的風(fēng)格,可取值為'%'、'{'和'$',默認(rèn)為'%'

handlers Python 3.3中新添加的配置項。該選項如果被指定,它應(yīng)該是一個創(chuàng)建了多個Handler的可迭代對象,這些handler將會被添加到root logger。需要說明的是:filename、stream和handlers這三個配置項只能有一個存在,不能同時出現(xiàn)2個或3個,否則會引發(fā)ValueError異常。

相關(guān)文檔中,關(guān)于format信息格式如下

import logging

logging.basicConfig(level=logging.INFO,format=' %(name)s|%(asctime)s|%(levelname)s|%(message)s',filename=r'./test.log')

logging.info('lalalla')

第二種:日志流處理流程

import logging

logging.basicConfig(level=logging.INFO,format=' %(name)s|%(asctime)s|%(levelname)s|%(message)s',

filename=r'./test.log')

logging.info('lalalla')

logging.basicConfig(level=logging.INFO,format=' %(name)s|%(asctime)s|%(levelname)s|%(message)s',

filename=r'./test1.log')

logging.info('lalalla111111111')

可看到,一次指定兩個log存儲文件時,有一個是失效的,并且信息都輸入到第一個指定的log文件中。所以需要使用logging.getLogger([name]).沒有指定名字將返回root logger

日志模塊四大組件

日志器Logger??

提供了應(yīng)用程序可一直使用的接口,記錄產(chǎn)生的日志。

處理器Handler??

將logger創(chuàng)建的日志記錄發(fā)送到合適的目的輸出,日志器logger進行設(shè)置,不同的處理器(handler)可以將日志輸出到不同的位置,

過濾器Filter??

每個處理器(handler)都可以設(shè)置自己的過濾器(filter)實現(xiàn)日志過濾,決定輸出哪條日志記錄,丟棄哪條日志記錄

格式器Formatter? ?

?決定日志記錄的最終輸出格式,每個處理器(handler)都可以設(shè)置自己的格式器(formatter)實現(xiàn)同一條日志以不同的格式輸出到不同的地方。

日志大概流程:logger記錄器產(chǎn)生的日志記錄通過Handler處理器,發(fā)送到合適位置,filter過濾器決定輸出那些記錄,丟棄哪條日志記錄,formatter 格式化器指明輸出日志內(nèi)容的格式布局。

四大組件對應(yīng)的四大類Logger, Handler, Filter, Formatter

Logger類:

暴露方法,記錄程序運行時產(chǎn)生的日志信息;過濾設(shè)置,決定要對哪些日志進行后續(xù)處理;將日志消息傳送給所有設(shè)置好的日志handlers。

logger =?logging.getLogger(log_filename),多次調(diào)用getLogger()方法,但log_filename參數(shù)相同,將會返回指向同一個logger對象的引用。

常用配置方法:

Logger.setLevel()? ? 設(shè)置日志器將會處理的日志消息的最低嚴(yán)重級別,默認(rèn)是warning,如果需要更低等級的日志信息,需要進行設(shè)置。不然后面handler設(shè)置成info或者debug也是沒有日志記錄的。

Logger.addHandler() 和 Logger.removeHandler()? ? ? 為該logger對象添加 和 移除一個handler對象

Logger.addFilter() 和 Logger.removeFilter()? ? 為該logger對象添加 和 移除一個filter對象

Handler類

指定日志信息的分發(fā)目的,是輸入到控制臺,還是輸入到文件中等等。

Handler.setLevel(lel):指定被處理的信息級別,低于lel級別的信息將被忽略,logger中低于此級別的日志信息也不會輸出指定目的。

Handler.setFormatter():給這個handler選擇一個格式

Handler.addFilter(filt)、Handler.removeFilter(filt):新增或刪除一個filter對象

formater類

logging.Formatter.__init__(fmt=None, datefmt=None, style='%')

fmt:指定消息格式化字符串,如果不指定該參數(shù)則默認(rèn)使用message的原始值

datefmt:指定日期格式字符串,如果不指定該參數(shù)則默認(rèn)使用"%Y-%m-%d %H:%M:%S"

style:Python 3.2新增的參數(shù),可取值為 '%', '{'和 '$',如果不指定該參數(shù)則默認(rèn)使用'%'

Filter類

Filter可以被Handler和Logger用來做比level更細粒度的、更復(fù)雜的過濾功能。Filter是一個過濾器基類,它只允許某個logger層級下的日志事件通過過濾。該類定義如下:

classlogging.Filter(name='')? ??

????????filter(record)

Filter類詳情實例可參考:https://www.jb51.net/article/177134.htm

參考:https://www.cnblogs.com/yyds/p/6901864.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容