Python中的logging模塊詳解
logging模塊介紹
這個(gè)模塊為應(yīng)用與庫(kù)實(shí)現(xiàn)了靈活的事件日志系統(tǒng)的函數(shù)與類
該模塊定義的基礎(chǔ)類和函數(shù)都列在下面。記錄器暴露了應(yīng)用程序代碼直接使用的接口。
處理器將日志記錄(由記錄器創(chuàng)建)發(fā)送到適當(dāng)?shù)哪繕?biāo)。過(guò)濾器提供了更細(xì)粒度的功能,用于確定要輸出的日志記錄。格式器指定最終輸出中日志記錄的樣式。
日志級(jí)別
日志記錄級(jí)別的數(shù)值在下表中給出
| 級(jí)別 | 數(shù)值 |
| CRITICAL | 50 |
| ERROR | 40 |
| WARNING | 30 |
| INFO | 20 |
| DEBUG | 10 |
| NOTSET | 0 |
默認(rèn)情況下Python的logging模塊將日志打印到了標(biāo)準(zhǔn)輸出中,且只顯示了大于等于WARNING級(jí)別的日志,這說(shuō)明默認(rèn)的日志級(jí)別設(shè)置為WARNING 。
import logging
logging.debug('debug message')
logging.info('info message')
logging.warning('warning message')
logging.error('error message')
logging.critical('critical message')不需要打印,執(zhí)行文件會(huì)得到以下結(jié)果:
WARNING:root:warning message
ERROR:root:error message
CRITICAL:root:critical message
模板
import logging
import logging.config
import os
# 定義日志輸出格式 開(kāi)始
standard_format = '[%(asctime)s][%(threadName)s:%(thread)d][task_id:%(name)s][%(filename)s:%(lineno)d]' \
'[%(levelname)s][%(message)s]' #其中name為getlogger指定的名字
simple_format = '[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d]%(message)s'
# 定義日志輸出格式 結(jié)束
# 自定義文件路徑
url = os.path.dirname(os.path.dirname(__file__))
url_a = os.path.join(url, 'log')
if not os.path.exists(url_a):
os.mkdir(url_a)
logfile_path = os.path.join(url_a, 'log_a.log')
# log配置字典
LOGGING_DIC = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'standard': {
'format': standard_format
},
'simple': {
'format': simple_format
},
},
'filters': {}, # 過(guò)濾日志
'handlers': {
#打印到終端的日志
'console': {
'level': 'DEBUG',
'class': 'logging.StreamHandler', # 打印到屏幕
'formatter': 'simple'
},
#打印到文件的日志,收集info及以上的日志
'default': {
'level': 'DEBUG',
'class': 'logging.handlers.RotatingFileHandler', # 保存到文件
'formatter': 'standard',
'filename': logfile_path, # 日志文件路徑
'maxBytes': 1024*1024*5, # 日志大小 5M
'backupCount': 5,
'encoding': 'utf-8', # 日志文件的編碼,再也不用擔(dān)心中文log亂碼了
},
},
'loggers': {
#logging.getLogger(__name__)拿到的logger配置
# '': {
# 'handlers': ['default', 'console'], # 這里把上面定義的兩個(gè)handler都加上,即log數(shù)據(jù)既寫(xiě)入文件又打印到屏幕
# 'level': 'DEBUG',
# 'propagate': True, # 向上(更高level的logger)傳遞
# }, # 當(dāng)鍵不存在的情況下 (key設(shè)為空字符串)默認(rèn)都會(huì)使用該k:v配置
'注冊(cè)記錄': {
'handlers': ['console'], # 這里把上面定義的兩個(gè)handler都加上,即log數(shù)據(jù)既寫(xiě)入文件又打印到屏幕
'level': 'WARNING',
'propagate': True, # 向上(更高level的logger)傳遞
}, # 當(dāng)鍵不存在的情況下 (key設(shè)為空字符串)默認(rèn)都會(huì)使用該k:v配置
},
}
# 使用日志字典配置
logging.config.dictConfig(LOGGING_DIC) # 自動(dòng)加載字典中的配置
# logger1 = logging.getLogger('轉(zhuǎn)賬記錄')
logger2 = logging.getLogger('注冊(cè)記錄')
# logger1.debug('別忘點(diǎn)贊')
logger2.error('xxx轉(zhuǎn)賬100000¥')logging.basicConfig()函數(shù)中可通過(guò)具體參數(shù)來(lái)更改logging模塊默認(rèn)行為,可用參數(shù)有:
- filename:用指定的文件名創(chuàng)建FiledHandler,這樣日志會(huì)被存儲(chǔ)在指定的文件中。
- filemode:文件打開(kāi)方式,在指定了filename時(shí)使用這個(gè)參數(shù),默認(rèn)值為“a”還可指定為“w”。
- format:指定handler使用的日志顯示格式。
- datefmt:指定日期時(shí)間格式。
- level:設(shè)置rootlogger(后邊會(huì)講解具體概念)的日志級(jí)別
- stream:用指定的stream創(chuàng)建StreamHandler??梢灾付ㄝ敵龅絪ys.stderr,sys.stdout或者文件(f=open(‘test.log’,’w’)),默認(rèn)為sys.stderr。若同時(shí)列出了filename和stream兩個(gè)參數(shù),則stream參數(shù)會(huì)被忽略。
format參數(shù)中可能用到的格式化串:
- %(name)s Logger的名字
- %(levelno)s 數(shù)字形式的日志級(jí)別
- %(levelname)s 文本形式的日志級(jí)別
- %(pathname)s 調(diào)用日志輸出函數(shù)的模塊的完整路徑名,可能沒(méi)有
- %(filename)s 調(diào)用日志輸出函數(shù)的模塊的文件名
- %(module)s 調(diào)用日志輸出函數(shù)的模塊名
- %(funcName)s 調(diào)用日志輸出函數(shù)的函數(shù)名
- %(lineno)d 調(diào)用日志輸出函數(shù)的語(yǔ)句所在的代碼行
- %(created)f 當(dāng)前時(shí)間,用UNIX標(biāo)準(zhǔn)的表示時(shí)間的浮 點(diǎn)數(shù)表示
- %(relativeCreated)d 輸出日志信息時(shí)的,自Logger創(chuàng)建以 來(lái)的毫秒數(shù)
- %(asctime)s 字符串形式的當(dāng)前時(shí)間。默認(rèn)格式是 “2003-07-08 16:49:45,896”。逗號(hào)后面的是毫秒
- %(thread)d 線程ID??赡軟](méi)有
- %(threadName)s 線程名??赡軟](méi)有
- %(process)d 進(jìn)程ID??赡軟](méi)有
- %(message)s用戶輸出的消息
到此這篇關(guān)于Python中的logging模塊詳解的文章就介紹到這了,更多相關(guān)Python的logging模塊內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python TCP全連接攻擊中SockStress全連接攻擊詳解
Sock Stress 全連接攻擊屬于TCP全連接攻擊,因?yàn)樾枰⒁淮瓮暾腡CP三次握手,該攻擊的關(guān)鍵點(diǎn)就在于,攻擊主機(jī)將windows窗口緩沖設(shè)置為0,實(shí)現(xiàn)的拒絕服務(wù)2022-10-10
python根據(jù)完整路徑獲得盤(pán)名/路徑名/文件名/文件擴(kuò)展名的方法
這篇文章主要介紹了python根據(jù)完整路徑獲得盤(pán)名,路徑名,文件名,文件擴(kuò)展名的代碼,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-04-04
關(guān)于numpy中eye和identity的區(qū)別詳解
今天小編就為大家分享一篇關(guān)于numpy中eye和identity的區(qū)別詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-11-11
Python入門(mén)教程(一)Python簡(jiǎn)單介紹
這篇文章主要介紹了Python入門(mén)教程(一)Python簡(jiǎn)單介紹,Python是一門(mén)非常強(qiáng)大好用的語(yǔ)言,也有著易上手的特性,本文為入門(mén)教程,需要的朋友可以參考下2023-04-04
使用python腳本實(shí)現(xiàn)Redis未授權(quán)訪問(wèn)檢測(cè)
Redis未授權(quán)訪問(wèn)漏洞是一種安全漏洞,可能導(dǎo)致未經(jīng)授權(quán)的用戶或攻擊者訪問(wèn)Redis數(shù)據(jù)庫(kù),甚至修改或刪除其中的數(shù)據(jù),這種漏洞通常發(fā)生在管理員未正確配置Redis實(shí)例的訪問(wèn)控制和認(rèn)證機(jī)制時(shí),本文介紹了python腳本實(shí)現(xiàn)Redis未授權(quán)訪問(wèn)漏洞利用,需要的朋友可以參考下2024-10-10
Pyqt實(shí)現(xiàn)無(wú)邊框窗口拖動(dòng)以及窗口大小改變
這篇文章主要為大家詳細(xì)介紹了Pyqt實(shí)現(xiàn)無(wú)邊框窗口拖動(dòng)及大小改變的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-04-04
Python統(tǒng)計(jì)詞頻并繪制圖片(附完整代碼)
這篇文章主要介紹了Python統(tǒng)計(jì)詞頻并繪制圖片(附完整代碼)本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-08-08
3種Python 實(shí)現(xiàn)酷炫進(jìn)度條的實(shí)用方法
這篇文章主要介紹了3種Python 實(shí)現(xiàn)酷炫進(jìn)度條的實(shí)用方法,文章圍繞Python的相關(guān)資料展開(kāi)對(duì)實(shí)現(xiàn)進(jìn)度條的介紹,需要的小伙伴可以參考一下2022-04-04
詳解Python靜態(tài)網(wǎng)頁(yè)爬取獲取高清壁紙
這篇文章主要介紹了Python爬取高清壁紙,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04

