Python中的logging模塊詳解
logging模塊介紹
這個模塊為應(yīng)用與庫實(shí)現(xiàn)了靈活的事件日志系統(tǒng)的函數(shù)與類
該模塊定義的基礎(chǔ)類和函數(shù)都列在下面。記錄器暴露了應(yīng)用程序代碼直接使用的接口。
處理器將日志記錄(由記錄器創(chuàng)建)發(fā)送到適當(dāng)?shù)哪繕?biāo)。過濾器提供了更細(xì)粒度的功能,用于確定要輸出的日志記錄。格式器指定最終輸出中日志記錄的樣式。
日志級別
日志記錄級別的數(shù)值在下表中給出
級別 | 數(shù)值 |
CRITICAL | 50 |
ERROR | 40 |
WARNING | 30 |
INFO | 20 |
DEBUG | 10 |
NOTSET | 0 |
默認(rèn)情況下Python的logging模塊將日志打印到了標(biāo)準(zhǔn)輸出中,且只顯示了大于等于WARNING級別的日志,這說明默認(rèn)的日志級別設(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í)行文件會得到以下結(jié)果:
WARNING:root:warning message
ERROR:root:error message
CRITICAL:root:critical message
模板
import logging import logging.config import os # 定義日志輸出格式 開始 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': {}, # 過濾日志 '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'], # 這里把上面定義的兩個handler都加上,即log數(shù)據(jù)既寫入文件又打印到屏幕 # 'level': 'DEBUG', # 'propagate': True, # 向上(更高level的logger)傳遞 # }, # 當(dāng)鍵不存在的情況下 (key設(shè)為空字符串)默認(rèn)都會使用該k:v配置 '注冊記錄': { 'handlers': ['console'], # 這里把上面定義的兩個handler都加上,即log數(shù)據(jù)既寫入文件又打印到屏幕 'level': 'WARNING', 'propagate': True, # 向上(更高level的logger)傳遞 }, # 當(dāng)鍵不存在的情況下 (key設(shè)為空字符串)默認(rèn)都會使用該k:v配置 }, } # 使用日志字典配置 logging.config.dictConfig(LOGGING_DIC) # 自動加載字典中的配置 # logger1 = logging.getLogger('轉(zhuǎn)賬記錄') logger2 = logging.getLogger('注冊記錄') # logger1.debug('別忘點(diǎn)贊') logger2.error('xxx轉(zhuǎn)賬100000¥')
logging.basicConfig()函數(shù)中可通過具體參數(shù)來更改logging模塊默認(rèn)行為,可用參數(shù)有:
- filename:用指定的文件名創(chuàng)建FiledHandler,這樣日志會被存儲在指定的文件中。
- filemode:文件打開方式,在指定了filename時使用這個參數(shù),默認(rèn)值為“a”還可指定為“w”。
- format:指定handler使用的日志顯示格式。
- datefmt:指定日期時間格式。
- level:設(shè)置rootlogger(后邊會講解具體概念)的日志級別
- stream:用指定的stream創(chuàng)建StreamHandler??梢灾付ㄝ敵龅絪ys.stderr,sys.stdout或者文件(f=open(‘test.log’,’w’)),默認(rèn)為sys.stderr。若同時列出了filename和stream兩個參數(shù),則stream參數(shù)會被忽略。
format參數(shù)中可能用到的格式化串:
- %(name)s Logger的名字
- %(levelno)s 數(shù)字形式的日志級別
- %(levelname)s 文本形式的日志級別
- %(pathname)s 調(diào)用日志輸出函數(shù)的模塊的完整路徑名,可能沒有
- %(filename)s 調(diào)用日志輸出函數(shù)的模塊的文件名
- %(module)s 調(diào)用日志輸出函數(shù)的模塊名
- %(funcName)s 調(diào)用日志輸出函數(shù)的函數(shù)名
- %(lineno)d 調(diào)用日志輸出函數(shù)的語句所在的代碼行
- %(created)f 當(dāng)前時間,用UNIX標(biāo)準(zhǔn)的表示時間的浮 點(diǎn)數(shù)表示
- %(relativeCreated)d 輸出日志信息時的,自Logger創(chuàng)建以 來的毫秒數(shù)
- %(asctime)s 字符串形式的當(dāng)前時間。默認(rèn)格式是 “2003-07-08 16:49:45,896”。逗號后面的是毫秒
- %(thread)d 線程ID??赡軟]有
- %(threadName)s 線程名??赡軟]有
- %(process)d 進(jìn)程ID。可能沒有
- %(message)s用戶輸出的消息
到此這篇關(guān)于Python中的logging模塊詳解的文章就介紹到這了,更多相關(guān)Python的logging模塊內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
pyspark 讀取csv文件創(chuàng)建DataFrame的兩種方法
今天小編就為大家分享一篇pyspark 讀取csv文件創(chuàng)建DataFrame的兩種方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-06-06關(guān)于Python中兩個不同shape的數(shù)組間運(yùn)算規(guī)則
這篇文章主要介紹了關(guān)于Python中兩個不同shape的數(shù)組間運(yùn)算規(guī)則,眾所周知,相同?shape?的兩個數(shù)組間運(yùn)算是指兩個數(shù)組的對應(yīng)元素相加,我們經(jīng)常會碰到一些不同?shape?的數(shù)組間運(yùn)算,需要的朋友可以參考下2023-08-08python3實(shí)現(xiàn)單目標(biāo)粒子群算法
這篇文章主要為大家詳細(xì)介紹了python3實(shí)現(xiàn)單目標(biāo)粒子群算法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-11-11pytorch常用函數(shù)定義及resnet模型修改實(shí)例
這篇文章主要為大家介紹了pytorch常用函數(shù)定義及resnet模型修改實(shí)例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06django數(shù)據(jù)庫migrate失敗的解決方法解析
這篇文章主要介紹了django數(shù)據(jù)庫migrate失敗的解決方法解析,分享了相關(guān)代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下2018-02-02剖析Python的Tornado框架中session支持的實(shí)現(xiàn)代碼
這篇文章主要介紹了剖析Python的Tornado框架中session支持的實(shí)現(xiàn)代碼,這樣就可以使用Django等框架中大家所熟悉的session了,需要的朋友可以參考下2015-08-08matplotlib subplots 調(diào)整子圖間矩的實(shí)例
今天小編就為大家分享一篇matplotlib subplots 調(diào)整子圖間矩的實(shí)例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-05-05