欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python日志模塊logging案例詳解

 更新時(shí)間:2024年01月23日 09:15:46   作者:黑砂  
日志模塊主要用于輸出運(yùn)行日志,可以設(shè)置輸出日志的等級(jí)、日志保存路徑、日志文件回滾等,這篇文章主要介紹了python日志模塊logging,需要的朋友可以參考下

日志模塊主要用于輸出運(yùn)行日志,可以設(shè)置輸出日志的等級(jí)、日志保存路徑、日志文件回滾等

一、優(yōu)勢(shì)

可以通過(guò)設(shè)置不同的日志等級(jí),在release版本中只輸出重要信息,而不必顯示大量的調(diào)試信息;
print將所有信息都輸出到標(biāo)準(zhǔn)輸出中,嚴(yán)重影響開(kāi)發(fā)者從標(biāo)準(zhǔn)輸出中查看其它數(shù)據(jù);logging則可以由開(kāi)發(fā)者決定將信息輸出到什么地方,以及怎么輸出。

二、等級(jí)(level)

開(kāi)發(fā)應(yīng)用程序或部署開(kāi)發(fā)環(huán)境時(shí),可以使用DEBUG或INFO級(jí)別的日志獲取盡可能詳細(xì)的日志信息來(lái)進(jìn)行開(kāi)發(fā)或部署調(diào)試
應(yīng)用上線或部署生產(chǎn)環(huán)境時(shí),應(yīng)該使用WARNING或ERROR或CRITICAL級(jí)別的日志來(lái)降低機(jī)器的I/O壓力和提高獲取錯(cuò)誤日志信息的效率。日志級(jí)別的指定通常都是在應(yīng)用程序的配置文件中進(jìn)行指定的。
分級(jí)

日志等級(jí):DEBUG < INFO < WARNING < ERROR <CRITICAL

  • DEBUG 最詳細(xì)的日志信息,典型應(yīng)用場(chǎng)景是 問(wèn)題診斷
  • INFO 信息詳細(xì)程度僅次于DEBUG,通常只記錄關(guān)鍵節(jié)點(diǎn)信息,用于確認(rèn)一切都是按照我們預(yù)期的那樣進(jìn)行工作
  • WARNING 當(dāng)某些不期望的事情發(fā)生時(shí)記錄的信息(如,磁盤可用空間較低),但是此時(shí)應(yīng)用程序還是正常運(yùn)行的
  • ERROR 由于一個(gè)更嚴(yán)重的問(wèn)題導(dǎo)致某些功能不能正常運(yùn)行時(shí)記錄的信息
  • CRITICAL 當(dāng)發(fā)生嚴(yán)重錯(cuò)誤,導(dǎo)致應(yīng)用程序不能繼續(xù)運(yùn)行時(shí)記錄的信息

三、使用方式

1.使用logging提供的模塊級(jí)別的函數(shù)

創(chuàng)建一條日志記錄

  • 創(chuàng)建一條嚴(yán)重級(jí)別為DEBUG的日志記錄 logging.debug(msg, *args, **kwargs)
  • 創(chuàng)建一條嚴(yán)重級(jí)別為INFO的日志記錄 logging.info(msg, *args, **kwargs)
  • 創(chuàng)建一條嚴(yán)重級(jí)別為WARNING 的日志記錄 logging.warning(msg, *args, **kwargs)
  • 創(chuàng)建一條嚴(yán)重級(jí)別為ERROR的日志記錄 logging.error(msg, *args, **kwargs)
  • 創(chuàng)建一條嚴(yán)重級(jí)別為CRITICAL的日志記錄 logging.critical(msg, *args, **kwargs)
  • 創(chuàng)建一條嚴(yán)重級(jí)別為level的日志記錄 logging.log(level, *args, **kwargs)
例:
import logging
logging.debug("debug_msg")
logging.info("info_msg")
logging.warning("warning_msg")
logging.error("error_msg")
logging.critical("critical_msg") 

默認(rèn)情況下logging模塊將日志打印到只顯示了大于等于WARNING級(jí)別的日志,這說(shuō)明默認(rèn)的日志級(jí)別設(shè)置為WARNING(日志級(jí)別等級(jí)CRITICAL > ERROR > WARNING > INFO > DEBUG)

默認(rèn)的日志格式為日志級(jí)別:Logger名稱:用戶輸出消息

2.對(duì)root logger進(jìn)行一次性配置

logging.basicConfig(**kwargs) 

logging.basicConfig(**kwargs)函數(shù) 用于指定“要記錄的日志級(jí)別”、“日志格式”、“日志輸出位置”、“日志文件的打開(kāi)模式”等信息,其他幾個(gè)都是用于記錄各個(gè)級(jí)別日志的函數(shù)。
用默認(rèn)日志格式(Formatter)為日志系統(tǒng)建立一個(gè)默認(rèn)的流處理器(StreamHandler),設(shè)置基礎(chǔ)配置(如日志級(jí)別等)并加到root logger(根Logger)中)

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

  • filename 指定日志輸出目標(biāo)文件的文件名(可以寫文件名也可以寫文件的完整的絕對(duì)路徑,寫文件名日志放執(zhí)行文件目錄下,寫完整路徑按照完整路徑生成日志文件),指定該設(shè)置項(xiàng)后日志信心就不會(huì)被輸出到控制臺(tái)了
  • filemode 指定日志文件的打開(kāi)模式,默認(rèn)為’a’。需要注意的是,該選項(xiàng)要在filename指定時(shí)才有效
  • format 指定日志格式字符串,即指定日志輸出時(shí)所包含的字段信息以及它們的順序。logging模塊定義的格式字段下面會(huì)列出。
  • datefmt 指定日期/時(shí)間格式。需要注意的是,該選項(xiàng)要在format中包含時(shí)間字段%(asctime)s時(shí)才有效
  • level 指定日志器的日志級(jí)別
  • stream 指定日志輸出目標(biāo)stream,如sys.stdout、sys.stderr以及網(wǎng)絡(luò)stream。需要說(shuō)明的是,stream和filename不能同時(shí)提供,否則會(huì)引發(fā) ValueError異常
  • style Python 3.2中新添加的配置項(xiàng)。指定format格式字符串的風(fēng)格,可取值為’%‘、’{‘和’$‘,默認(rèn)為’%’
  • handlers Python3.3中新添加的配置項(xiàng)。該選項(xiàng)如果被指定,它應(yīng)該是一個(gè)創(chuàng)建了多個(gè)Handler的可迭代對(duì)象,這些handler將會(huì)被添加到root logger。需要說(shuō)明的是:filename、stream和handlers這三個(gè)配置項(xiàng)只能有一個(gè)存在,不能同時(shí)出現(xiàn)2個(gè)或3個(gè),否則會(huì)引發(fā)ValueError異常。
例
import logging
logging.basicConfig(level=logging.DEBUG,
                    format="%(asctime)s %(name)s %(levelname)s %(message)s",
                    datefmt = '%Y-%m-%d  %H:%M:%S %a'   
                    ) #注意月份和天數(shù)不要搞亂了,這里的格式化符與time模塊相同
logging.debug("msg1")
logging.info("msg2")
logging.warning("msg3")
logging.error("msg4")
logging.critical("msg5") 
結(jié)果:
2023-03-01  23:37:49 Wed root DEBUG msg1
2023-03-01  23:37:49 Wed root INFO msg2
2023-03-01  23:37:49 Wed root WARNING msg3
2023-03-01  23:37:49 Wed root ERROR msg4
2023-03-01  23:37:49 Wed root CRITICAL msg5 

四、日志流處理流程(使用Logging日志系統(tǒng)的四大組件)

日志器(logger)是入口,真正干活兒的是處理器(handler),處理器(handler)還可以通過(guò)過(guò)濾器(filter)和格式器(formatter)對(duì)要輸出的日志內(nèi)容做過(guò)濾和格式化等處理操作。

1.日志器-Logger

提供了應(yīng)用程序可一直使用的接口
功能
1)向應(yīng)用程序代碼暴露幾個(gè)方法,使應(yīng)用程序可以在運(yùn)行時(shí)記錄日志消息;
2)基于日志嚴(yán)重等級(jí)(默認(rèn)的過(guò)濾設(shè)施)或filter對(duì)象來(lái)決定要對(duì)哪些日志進(jìn)行后續(xù)處理;
3)將日志消息傳送給所有感興趣的日志handlers。
Logger對(duì)象最常用的方法分為兩類:配置方法 和 消息發(fā)送方法

配置方法
Logger.setLevel() 設(shè)置日志器將會(huì)處理的日志消息的最低嚴(yán)重級(jí)別
Logger.addHandler() 和 Logger.removeHandler() 為該logger對(duì)象添加 和 移除一個(gè)handler對(duì)象
Logger.addFilter() 和 Logger.removeFilter() 為該logger對(duì)象添加 和 移除一個(gè)filter對(duì)象

創(chuàng)建日志記錄

創(chuàng)建一個(gè)與它們的方法名對(duì)應(yīng)等級(jí)的日志記錄
Logger.debug(), Logger.info(), Logger.warning(), Logger.error(), Logger.critical()

創(chuàng)建一個(gè)類似于Logger.error()的日志消息
Logger.exception()

需要獲取一個(gè)明確的日志level參數(shù)來(lái)創(chuàng)建一個(gè)日志記錄
Logger.log()

2.處理器 -Handler

將logger創(chuàng)建的日志記錄分發(fā)到handler指定的位置(文件、網(wǎng)絡(luò)、郵件等)。

子類
- logging.StreamHandler 將日志消息發(fā)送到輸出到Stream,如std.out, std.err或任何file-like對(duì)象。
- logging.FileHandler 將日志消息發(fā)送到磁盤文件,默認(rèn)情況下文件大小會(huì)無(wú)限增長(zhǎng)
- logging.handlers.RotatingFileHandler 將日志消息發(fā)送到磁盤文件,并支持日志文件按大小切割
- logging.hanlders.TimedRotatingFileHandler 將日志消息發(fā)送到磁盤文件,并支持日志文件按時(shí)間切割
- logging.handlers.HTTPHandler 將日志消息以GET或POST的方式發(fā)送給一個(gè)HTTP服務(wù)器
- logging.handlers.SMTPHandler 將日志消息發(fā)送給一個(gè)指定的email地址
- logging.NullHandler 該Handler實(shí)例會(huì)忽略error messages,通常被想使用logging的library開(kāi)發(fā)者使用來(lái)避免’No handlers could be found for logger XXX’信息的出現(xiàn)。

說(shuō)明
Handler.setLevel(lel):指定被處理的信息級(jí)別,低于lel級(jí)別的信息將被忽略
Handler.setFormatter():給這個(gè)handler選擇一個(gè)格式
Handler.addFilter(filt)、Handler.removeFilter(filt):新增或刪除一個(gè)filter對(duì)象

3.過(guò)濾器 -Filter

提供了更細(xì)粒度的控制工具來(lái)決定輸出哪條日志記錄,丟棄哪條日志記錄
Filter是一個(gè)過(guò)濾器基類,它只允許某個(gè)logger層級(jí)下的日志事件通過(guò)過(guò)濾
定義
class logging.Filter(name=‘’)
filter(record)

4.格式器 Formatter

配置日志信息的最終順序、結(jié)構(gòu)和內(nèi)容。
Formatter類的構(gòu)造方法

logging.Formatter.__init__(fmt=None, datefmt=None, style='%')
	參數(shù)
		fmt:指定消息格式化字符串,如果不指定該參數(shù)則默認(rèn)使用message的原始值
		datefmt:指定日期格式字符串,如果不指定該參數(shù)則默認(rèn)使用"%Y-%m-%d %H:%M:%S"
		style:Python 3.2新增的參數(shù),可取值為 '%', '{'和 '$',如果不指定該參數(shù)則默認(rèn)使用'%'

5.日志流處理簡(jiǎn)要流

  • 1、創(chuàng)建一個(gè)logger
  • 2、設(shè)置下logger的日志的等級(jí)
  • 3、創(chuàng)建合適的Handler(FileHandler要有路徑)
  • 4、設(shè)置下每個(gè)Handler的日志等級(jí)
  • 5、創(chuàng)建下日志的格式
  • 6、向Handler中添加上面創(chuàng)建的格式
  • 7、將上面創(chuàng)建的Handler添加到logger中
  • 8、打印輸出logger.debug\logger.info\logger.warning\logger.error\logger.critical

6.實(shí)例

import logging
# 創(chuàng)建日志器對(duì)象
logger = logging.getLogger(__name__)
# 設(shè)置logger可輸出日志級(jí)別范圍
logger.setLevel(logging.DEBUG)
# 添加控制臺(tái)handler,用于輸出日志到控制臺(tái)
console_handler = logging.StreamHandler()
# 添加日志文件handler,用于輸出日志到文件中
file_handler = logging.FileHandler(filename='log.log', encoding='UTF-8')
# 將handler添加到日志器中
logger.addHandler(console_handler)
logger.addHandler(file_handler)
# 設(shè)置格式并賦予handler
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
console_handler.setFormatter(formatter)
file_handler.setFormatter(formatter)
# 輸出不同級(jí)別日志
logger.debug("============【開(kāi)始測(cè)試】====================")
logger.info("============【開(kāi)始測(cè)試】====================")
logger.warning("============【開(kāi)始測(cè)試】====================")
logger.critical("============【開(kāi)始測(cè)試】====================")
logger.error("============【開(kāi)始測(cè)試】====================")
結(jié)果為:
2023-03-18 02:32:46,316 - __main__ - DEBUG - ============【開(kāi)始測(cè)試】====================
2023-03-18 02:32:46,316 - __main__ - INFO - ============【開(kāi)始測(cè)試】====================
2023-03-18 02:32:46,316 - __main__ - WARNING - ============【開(kāi)始測(cè)試】====================
2023-03-18 02:32:46,316 - __main__ - CRITICAL - ============【開(kāi)始測(cè)試】====================
2023-03-18 02:32:46,316 - __main__ - ERROR - ============【開(kāi)始測(cè)試】====================

到此這篇關(guān)于python日志模塊logging的文章就介紹到這了,更多相關(guān)python日志模塊logging內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python使用Turtle庫(kù)繪制動(dòng)態(tài)鐘表

    python使用Turtle庫(kù)繪制動(dòng)態(tài)鐘表

    這篇文章主要為大家詳細(xì)介紹了python使用Turtle庫(kù)繪制動(dòng)態(tài)鐘表,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • pandas解決空列表問(wèn)題

    pandas解決空列表問(wèn)題

    本文主要介紹了Python的pandas庫(kù)中高效處理空列表的問(wèn)題,包括識(shí)別、過(guò)濾、替換和聚合操作,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2025-01-01
  • 詳解pandas刪除缺失數(shù)據(jù)(pd.dropna()方法)

    詳解pandas刪除缺失數(shù)據(jù)(pd.dropna()方法)

    這篇文章主要介紹了pandas刪除缺失數(shù)據(jù)(pd.dropna()方法),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • python requests response值判斷方式

    python requests response值判斷方式

    這篇文章主要介紹了python requests response值判斷方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-04-04
  • pandas按若干個(gè)列的組合條件篩選數(shù)據(jù)的方法

    pandas按若干個(gè)列的組合條件篩選數(shù)據(jù)的方法

    下面小編就為大家分享一篇pandas按若干個(gè)列的組合條件篩選數(shù)據(jù)的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-04-04
  • Python?PaddleNLP開(kāi)源實(shí)現(xiàn)快遞單信息抽取

    Python?PaddleNLP開(kāi)源實(shí)現(xiàn)快遞單信息抽取

    這篇文章主要為大家介紹了Python?PaddleNLP開(kāi)源項(xiàng)目實(shí)現(xiàn)對(duì)快遞單信息抽取,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • Django異步任務(wù)線程池實(shí)現(xiàn)原理

    Django異步任務(wù)線程池實(shí)現(xiàn)原理

    這篇文章主要介紹了Django異步任務(wù)線程池實(shí)現(xiàn)原理,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • django 實(shí)現(xiàn)celery動(dòng)態(tài)設(shè)置周期任務(wù)執(zhí)行時(shí)間

    django 實(shí)現(xiàn)celery動(dòng)態(tài)設(shè)置周期任務(wù)執(zhí)行時(shí)間

    今天小編就為大家分享一篇django 實(shí)現(xiàn)celery動(dòng)態(tài)設(shè)置周期任務(wù)執(zhí)行時(shí)間,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-11-11
  • Python 余弦相似度與皮爾遜相關(guān)系數(shù) 計(jì)算實(shí)例

    Python 余弦相似度與皮爾遜相關(guān)系數(shù) 計(jì)算實(shí)例

    今天小編就為大家分享一篇Python 余弦相似度與皮爾遜相關(guān)系數(shù) 計(jì)算實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-12-12
  • python練習(xí)之曾經(jīng)很火的小人畫愛(ài)心表白代碼

    python練習(xí)之曾經(jīng)很火的小人畫愛(ài)心表白代碼

    小編有個(gè)好兄弟最近在追妹子,跟妹子打得火熱!就差臨門一腳了,這一jio我?guī)兔ρa(bǔ)上去了!他問(wèn)有沒(méi)有什么酷炫的表白方式,可以給人心動(dòng)的趕jio,表白的方式有許多種今天小編來(lái)教大家一個(gè)之前很火的小人畫愛(ài)心表白代碼
    2021-09-09

最新評(píng)論