日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

Python的日志记录-logging模块的使用

發(fā)布時(shí)間:2023/12/9 python 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python的日志记录-logging模块的使用 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、日志

1.1什么是日志

日志是跟蹤軟件運(yùn)行時(shí)所發(fā)生的事件的一種方法,軟件開發(fā)者在代碼中調(diào)用日志函數(shù),表明發(fā)生了特定的事件,事件由描述性消息描述,同時(shí)還包含事件的重要性,重要性也稱為級(jí)別或嚴(yán)重性

1.2何時(shí)使用日志

logging模塊提供了一些函數(shù),用來(lái)做一些簡(jiǎn)單的日志,他們是debug()、info()、warning()、error()、critical()。要決定什么時(shí)候使用logging,見下表,描述了常見的任務(wù)及對(duì)應(yīng)的最佳工具。

你想完成的任務(wù)完成任務(wù)的最佳工具
控制臺(tái)上顯示命令行腳本或者程序的常規(guī)用法說(shuō)明print()
報(bào)告在程序的正常操作期間發(fā)生的事件(例如,用于狀態(tài)監(jiān)視或故障調(diào)查)logging.info()?(或者?logging.debug()?,非常詳細(xì)的輸出,用于診斷目的)
對(duì)于特定的運(yùn)行時(shí)事件發(fā)出警告

在庫(kù)代碼中使用warnings.warn()?,表明問題是可以避免的,且客戶應(yīng)用應(yīng)該修改代碼以消除警告

使用logging.warning()?表示客戶應(yīng)用對(duì)此問題無(wú)能為力,但是還是應(yīng)該注意該事件。

對(duì)于特定的運(yùn)行時(shí)事件報(bào)告錯(cuò)誤拋出異常
報(bào)告錯(cuò)誤的抑制而不引發(fā)異常(例如,在長(zhǎng)時(shí)間運(yùn)行的服務(wù)器進(jìn)程中的錯(cuò)誤處理程序)根據(jù)特定的錯(cuò)誤和應(yīng)用領(lǐng)域,使用合適的logging.error()、?logging.exception()?或者logging.critical()

?

1.3事件嚴(yán)重性(事件的級(jí)別)

?

級(jí)別何時(shí)使用
DEBUG詳細(xì)信息,一般只在調(diào)試問題時(shí)使用。
INFO證明事情按預(yù)期工作。
WARNING某些沒有預(yù)料到的事件的提示,或者在將來(lái)可能會(huì)出現(xiàn)的問題提示。例如:磁盤空間不足。但是軟件還是會(huì)照常運(yùn)行。
ERROR由于更嚴(yán)重的問題,軟件已不能執(zhí)行一些功能了。
CRITICAL嚴(yán)重錯(cuò)誤,表明軟件已不能繼續(xù)運(yùn)行了。

默認(rèn)等級(jí)時(shí)warning。意味著只有warning以上的事件等級(jí)才會(huì)反饋信息,可以通過(guò)logging.setLevel()修改默認(rèn)等級(jí)。

二、Logging簡(jiǎn)介

logging模塊定義的類和函數(shù)位應(yīng)用程序和庫(kù)實(shí)現(xiàn)了一個(gè)靈活的事件日志系統(tǒng)。由標(biāo)準(zhǔn)庫(kù)提供的日志記錄API的好處是所有的Python模塊都可以使用日志。

2.1使用logging記錄到控制臺(tái)

#1.使用logging 將日志打印到控制臺(tái) logging.basicConfig(level=logging.DEBUG) #默認(rèn)level時(shí)warning。所以需要修改一下級(jí)別 logging.debug('debug') logging.info('info') logging.warning('warning') logging.error('error') logging.critical('critical')

2.2使用logging將日志記錄到文件

#2.將日志記錄到文件 logging.basicConfig(filename='logging.log',filemode='a',level=logging.DEBUG) #默認(rèn)level時(shí)warning。所以需要修改一下級(jí)別 logging.debug('debug') logging.info('info') logging.warning('warning') logging.error('error') logging.critical('critical')

2.3 如果程序由多個(gè)模塊,組織日志

# myapp.py import logging import mylibdef main():logging.basicConfig(filename='myapp.log', level=logging.INFO)logging.info('Started') mylib.do_something() logging.info('Finished') if __name__ == '__main__':main()

三、改變顯示消息格式Formatter

logger對(duì)象一般不會(huì)直接實(shí)例化得到,而是通過(guò)模塊級(jí)別的logging.getLogger()得到。以相同的名字多次調(diào)用getLogger()。永遠(yuǎn)返回相同的logger對(duì)象的引用-->單例模式。

3.1 format 指定輸出格式和內(nèi)容

?

import logging logging.basicConfig(format='%(levelname)s:%(message)s',level=logging.DEBUG) logging.debug('debug msg') logging.info('info msg') logging.warning('warning msg') logging.error('error msg') logging.critical('critical msg')

常用的format格式:

%(levelno)s: 打印日志級(jí)別的數(shù)值%(levelname)s: 打印日志級(jí)別名稱%(pathname)s: 打印當(dāng)前執(zhí)行程序的路徑,其實(shí)就是sys.argv[0]%(filename)s: 打印當(dāng)前執(zhí)行程序名%(funcName)s: 打印日志的當(dāng)前函數(shù)%(lineno)d: 打印日志的當(dāng)前行號(hào)%(asctime)s: 打印日志的時(shí)間%(thread)d: 打印線程ID%(threadName)s: 打印線程名稱%(process)d: 打印進(jìn)程ID%(message)s: 打印日志信息 format import os #format logging.basicConfig(level=logging.DEBUG,format='%(asctime)s:%(filename)s [line:%(lineno)d] %(levelname)s %(message)s',datefmt='%a, %d %b %Y %H:%M:%S',filename= os.path.join('format.txt'),filemode='w',) logging.debug('debug msg') logging.error('error msg')

四、Logger

Logger對(duì)象有三個(gè)作用,首先,它暴露給應(yīng)用幾個(gè)方法以便應(yīng)用可以在運(yùn)行時(shí)寫log;其次,Logger對(duì)象按照l(shuí)og信息的嚴(yán)重程度或者根據(jù)filter對(duì)象來(lái)決定如何處理log信息(默認(rèn)的過(guò)濾功能);最后,logger還負(fù)責(zé)把log信息傳送給相關(guān)的loghandlers。

4.1將日志記錄控制臺(tái)及文件

import logginglogger = logging.getLogger() # 創(chuàng)建一個(gè)handler,用于寫入日志文件 fh = logging.FileHandler('test.log',encoding='utf-8') # 再創(chuàng)建一個(gè)handler,用于輸出到控制臺(tái) ch = logging.StreamHandler() formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') fh.setLevel(logging.DEBUG)fh.setFormatter(formatter) ch.setFormatter(formatter) logger.addHandler(fh) #logger對(duì)象可以添加多個(gè)fh和ch對(duì)象 logger.addHandler(ch) logger.debug('logger debug message') logger.info('logger info message') logger.warning('logger warning message') logger.error('logger error message') logger.critical('logger critical message')

?

logging庫(kù)提供了多個(gè)組件:Logger、Handler、Filter、Formatter。Logger對(duì)象提供應(yīng)用程序可直接使用的接口,Handler發(fā)送日志到適當(dāng)?shù)哪康牡?#xff0c;Filter提供了過(guò)濾日志信息的方法,Formatter指定日志顯示格式。另外,可以通過(guò):logger.setLevel(logging.Debug)設(shè)置級(jí)別,當(dāng)然,也可以通過(guò)

fh.setLevel(logging.Debug)單對(duì)文件流設(shè)置某個(gè)級(jí)別。

轉(zhuǎn)載于:https://www.cnblogs.com/weihengblog/p/8568283.html

總結(jié)

以上是生活随笔為你收集整理的Python的日志记录-logging模块的使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。