上一篇我們已經(jīng)對log進(jìn)行過簡單的封裝纳胧,現(xiàn)在來說另外一種霉撵,在配置文件中進(jìn)行磺浙,1洪囤、將配置文件寫錯yaml的格式,2撕氧、將配置文件寫成dict的格式瘤缩,yaml文件和dict本質(zhì)上一樣,直接上代碼
1伦泥、新建setting目錄剥啤,新建一個settings.py
'''
logging模塊有三個比較重要的功能組件:
1、loggers :日志記錄器的名稱不脯,比如loggers1府怯,login模塊
2、handler :日志的分隔大小,輸出位置,日志文件創(chuàng)建等
3防楷、formatters 配置日志輸出的格式
'''
from datetime import datetime
import logging
class myFilter(logging.Filter):
def filter(self, record):
'''
一般根據(jù)日志收集器的名字牺丙,日志級別過濾一些日志
debug:10
info:20
warning:30
error:40
critical:50
'''
#過濾掉日志名稱為login的日志
if record.name == 'login':
return False
# 過濾掉level低于30(warning)的日志
if record.levelno <= 30:
return False
return True
LOGGING_DICT = {
"version": 1.0,
'disable_existing_loggers': False,
# 自定義幾個日志的輸出格式,供下面處理器選擇复局,我定義了兩種
'formatters': {
'standard': {
'format': '%(asctime)s [%(name)s] %(levelname)s [%(pathname)s:%(lineno)d] %(module)s [%(funcName)s] %(message)s',
'datefmt': '%Y-%m-%d %H:%M:%S', },#默認(rèn)的日期格式里面有毫秒冲簿,我們希望得到2022-08-29 12:01:30這種格式
'simple': {
'format': '%(asctime)s [%(name)s] %(levelname)s %(message)s',
'datefmt': '%Y-%m-%d %H:%M:%S', },
},
#添加到handler里面即可使用,也支持多個同時添加
'filters': {
"myfilters": {
"()": myFilter
}
},
# 日志處理器亿昏,我們定義了兩種峦剔,一個輸出到終端,一個輸出到文件
'handlers': {
'console_handler': {
'level': 'DEBUG', # 日志處理的級別限制
'class': 'logging.StreamHandler', # 輸出到終端
'formatter': 'simple' , # 日志格式
'filters': ["myfilters"]
},
'file_handler': {
'level': 'DEBUG',#日志級別:debug角钩,info吝沫,warning,error递礼,critical
'class': 'logging.handlers.RotatingFileHandler', # 保存到文件,日志輪轉(zhuǎn)
'filename': datetime.now().date().strftime('%Y%m%d') + ".log", # 以當(dāng)天的日期命名日志惨险,便于查詢,如20220826.log宰衙,20220827.log平道,根據(jù)自己項(xiàng)目配置路徑即可
'maxBytes': 1024 * 1024 * 10, # 日志大小 10M
'backupCount': 10, # 日志文件保存數(shù)量限制
'encoding': 'utf-8', # 日志編碼
'formatter': 'standard', # 日志格式,上面formatters里面自定義的
},
},
# 日志記錄器
"loggers": {
'': { # 如果為空供炼,則是你后面使用的時候自定義傳入的名字,如果不為空窘疮,那你使用的時候就是當(dāng)前寫死的名字
'handlers': ['console_handler', 'file_handler'], # 日志分配到哪個handlers中袋哼,可以一個,可以多個闸衫,列表形式涛贯,這種就是即打印到終端,也存入到文件
'level': 'INFO', # 日志記錄的級別限制
'propagate': False, # 默認(rèn)為True蔚出,向上(更高級別的logger)傳遞弟翘,設(shè)置為False即可虫腋,否則會一份日志向上層層傳遞
},
}
}
2、在setting目錄下面新建一個index.py
import logging.config#導(dǎo)入logging模塊里面的config包
from setting import settings#導(dǎo)入我們的配置文件
logging.config.dictConfig(settings.LOGGING_DICT)#直接讀取我們配置的字段內(nèi)容
#下面是自己定義的一些函數(shù)進(jìn)行試驗(yàn)
def login():
logger2 = logging.getLogger('登錄')#這里傳入登錄稀余,就是我們的搜集器的名稱就是登錄悦冀,根據(jù)自己的情況寫就好了,有的直接以項(xiàng)目名稱命名
logger2.info('***登錄成功了')
def look():
logger3 = logging.getLogger('瀏覽')
logger3.info('正在瀏覽手機(jī)類商品')
def get_order():
logger4 = logging.getLogger('下單')
logger4.warning("下單發(fā)生延遲")
def pay():
logger5 = logging.getLogger('支付')
logger5.error("***支付失敗")
if __name__ == '__main__':
for i in range(2):
login()
look()
get_order()
pay()
3睛琳、執(zhí)行上面的index.py盒蟆,在setting目錄下生成20220829.log文件,終端也會根據(jù)我們定義的格式保存日志;
20220829.log
2022-08-29 12:01:30 [登錄] INFO [D:\python\setting\index.py:9] index [login] ***登錄成功了
2022-08-29 12:01:30 [瀏覽] INFO [D:\python\setting\index.py:14] index [look] 正在瀏覽手機(jī)類商品
2022-08-29 12:01:30 [下單] WARNING [D:\python\setting\index.py:19] index [get_order] 下單發(fā)生延遲
2022-08-29 12:01:30 [支付] ERROR [D:\python\setting\index.py:24] index [pay] ***支付失敗
2022-08-29 12:01:30 [登錄] INFO [D:\python\setting\index.py:9] index [login] ***登錄成功了
2022-08-29 12:01:30 [瀏覽] INFO [D:\python\setting\index.py:14] index [look] 正在瀏覽手機(jī)類商品
2022-08-29 12:01:30 [下單] WARNING [D:\python\setting\index.py:19] index [get_order] 下單發(fā)生延遲
2022-08-29 12:01:30 [支付] ERROR [D:\python\setting\index.py:24] index [pay] ***支付失敗
終端:
2022-08-29 12:01:30 [登錄] INFO ***登錄成功了
2022-08-29 12:01:30 [瀏覽] INFO 正在瀏覽手機(jī)類商品
2022-08-29 12:01:30 [下單] WARNING 下單發(fā)生延遲
2022-08-29 12:01:30 [支付] ERROR ***支付失敗
2022-08-29 12:01:30 [登錄] INFO ***登錄成功了
2022-08-29 12:01:30 [瀏覽] INFO 正在瀏覽手機(jī)類商品
2022-08-29 12:01:30 [下單] WARNING 下單發(fā)生延遲
2022-08-29 12:01:30 [支付] ERROR ***支付失敗
總之师骗,這樣配置文件的方式其實(shí)更方便我們使用历等,什么地方需求,導(dǎo)入就行了辟癌,修改配置的時候也方便
追加
關(guān)于handler里面的兩個日志文件的參數(shù)
'maxBytes': 4000, # 單位是字節(jié)寒屯,比如1024*1024就是1M,一般寫大一點(diǎn)但是也不要太大
'backupCount': 3, # 日志文件保存數(shù)量限制
比如按照上面這樣配置黍少,那我的日志文件會生成20220902.log一個文件浩螺,文件大小超過4000字節(jié)之后,會生成20220902.log.1(本質(zhì)上20220902.log的內(nèi)容放在這個新文件里面仍侥,重新生成新的.log)
以此類推要出,當(dāng)20220902.log再次大于4000字節(jié),會生成20220902.log.2,會生成20220902.log.3
'backupCount': 3,現(xiàn)在就會限制生成的數(shù)量农渊,當(dāng)log繼續(xù)生成的時候患蹂,超過的部分文件就會被自動刪除,因此同時最多保持4個log文件