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