Python的日志記錄-logging模塊的使用

一、日志

1.1什么是日志

日志是跟蹤軟件運行時所發生的事件的一種方法,軟件開發者在代碼中調用日志函數,表明發生了特定的事件,事件由描述性消息描述,同時還包含事件的重要性,重要性也稱為級別或嚴重性

1.2何時使用日志

logging模塊提供了一些函數,用來做一些簡單的日志,他們是debug()、info()、warning()、error()、critical()。要決定什么時候使用logging,見下表,描述了常見的任務及對應的最佳工具。

你想完成的任務完成任務的最佳工具
控制臺上顯示命令行腳本或者程序的常規用法說明print()
報告在程序的正常操作期間發生的事件(例如,用于狀態監視或故障調查)logging.info()?(或者?logging.debug()?,非常詳細的輸出,用于診斷目的)
對于特定的運行時事件發出警告

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

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

對于特定的運行時事件報告錯誤拋出異常
報告錯誤的抑制而不引發異常(例如,在長時間運行的服務器進程中的錯誤處理程序)根據特定的錯誤和應用領域,使用合適的logging.error()、?logging.exception()?或者logging.critical()

?

1.3事件嚴重性(事件的級別)

?

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

默認等級時warning。意味著只有warning以上的事件等級才會反饋信息,可以通過logging.setLevel()修改默認等級。

二、Logging簡介

logging模塊定義的類和函數位應用程序和庫實現了一個靈活的事件日志系統。由標準庫提供的日志記錄API的好處是所有的Python模塊都可以使用日志。

2.1使用logging記錄到控制臺

#1.使用logging 將日志打印到控制臺
logging.basicConfig(level=logging.DEBUG) #默認level時warning。所以需要修改一下級別
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) #默認level時warning。所以需要修改一下級別
logging.debug('debug')
logging.info('info')
logging.warning('warning')
logging.error('error')
logging.critical('critical')

2.3 如果程序由多個模塊,組織日志

# 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對象一般不會直接實例化得到,而是通過模塊級別的logging.getLogger()得到。以相同的名字多次調用getLogger()。永遠返回相同的logger對象的引用-->單例模式。

3.1 format 指定輸出格式和內容

?

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: 打印日志級別的數值%(levelname)s: 打印日志級別名稱%(pathname)s: 打印當前執行程序的路徑,其實就是sys.argv[0]%(filename)s: 打印當前執行程序名%(funcName)s: 打印日志的當前函數%(lineno)d: 打印日志的當前行號%(asctime)s: 打印日志的時間%(thread)d: 打印線程ID%(threadName)s: 打印線程名稱%(process)d: 打印進程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對象有三個作用,首先,它暴露給應用幾個方法以便應用可以在運行時寫log;其次,Logger對象按照log信息的嚴重程度或者根據filter對象來決定如何處理log信息(默認的過濾功能);最后,logger還負責把log信息傳送給相關的loghandlers。

4.1將日志記錄控制臺及文件

import logginglogger = logging.getLogger()
# 創建一個handler,用于寫入日志文件
fh = logging.FileHandler('test.log',encoding='utf-8') # 再創建一個handler,用于輸出到控制臺 
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對象可以添加多個fh和ch對象 
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庫提供了多個組件:Logger、Handler、Filter、Formatter。Logger對象提供應用程序可直接使用的接口,Handler發送日志到適當的目的地,Filter提供了過濾日志信息的方法,Formatter指定日志顯示格式。另外,可以通過:logger.setLevel(logging.Debug)設置級別,當然,也可以通過

fh.setLevel(logging.Debug)單對文件流設置某個級別。

轉載于:https://www.cnblogs.com/weihengblog/p/8568283.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/281002.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/281002.shtml
英文地址,請注明出處:http://en.pswp.cn/news/281002.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

詢問HTG:白噪聲屏幕保護程序,有效的文件命名以及從密碼泄露中恢復

Once a week we share three of the questions we’ve answered from the Ask HTG inbox with the greater readership; this week we’re looking at white noise screen savers, efficient file naming systems, and recovering from a password compromise. 每周一次&#…

專家預測第二波WannaCry勒索病毒攻擊即將到來!

WannaCry的傳播腳步今晨戛然而止 今天一大早,全網的WannaCry蠕蟲病毒攻擊突然減弱消退了!所有這一切功勞來自于英國研究人員malwaretech,他通過逆向發現WannaCry代碼中有一個特殊域名地址: www.iuqerfsodp9ifjaposdfjhgosurijfaewrwergwea.co…

01.HTML基礎命令筆記

目錄 HTML結構 body內常用標簽 常用 div與span img a標簽 超鏈接標簽 其他格式標簽 列表 表格 表單 select標簽 label標簽 textarea多行文本 HTML結構 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"&…

ios numlock_從“提示”框:默認情況下啟用NumLock,無廣告的iOS應用和立體聲供電的派對燈...

ios numlockOnce a week we round up some of the great tips readers have sent into the tip box. This week we’re looking at how to enable the NumLock by default, stripping ads from iOS apps, and turning Christmas lights into audio-responsive party lights. 每…

Windows 7 自動更新失敗導致無法進系統解決方案

故障現象&#xff1a;自動更新后&#xff0c;重啟電腦&#xff0c;提示&#xff1a;&#xff08;配置Windows update 失敗 還原更改 請勿關閉計算機&#xff09;&#xff0c; 而計算機一直停留該界面&#xff0c;如果半個小時以上都無反應。此時&#xff0c;就不要再繼續等待了…

Net程序員為什么要學點其他語言副業

最近看了很多同行的文章、或者是現實中身邊的例子也好&#xff0c;真的覺得大家太不容易了。感覺說的就是自己。入門上學的時候接觸了.NET&#xff0c;它的簡單以及宇宙無敵的Visual Studio&#xff0c;讓我深深地迷戀上它。畢業之后&#xff0c;就成功的做來一名.Neter&#x…

PaperWeekly 第28期 | 圖像語義分割之特征整合和結構預測

“ 余昌黔 華中科技大學碩士 研究方向為圖像語義分割 知乎專欄 https://zhuanlan.zhihu.com/semantic-segmentation 前言 近來閱讀了 PASCAL VOC 2012 排行榜上前幾的文章&#xff0c;包括 PSPNet 和林國省老師的幾篇論文&#xff0c;覺得現在在 semantic segmentation 領域對于…

POJ.2774.Long Long Message/SPOJ.1811.LCS(后綴數組 倍增)

題目鏈接 POJ2774SPOJ1811 LCS - Longest Common Substring 比后綴自動機慢好多(廢話→_→)。 \(Description\) 求兩個字符串最長公共子串 \(Solution\) 任何一個子串一定是某個后綴的前綴 可以將兩個字符串拼在一起&#xff0c;中間用一個從未出現過的字符隔開&#xff0c;這樣…

02.CSS基礎筆記及導入

CSS是什么 CSS&#xff08;Cascading Style Sheet&#xff0c;層疊樣式表)定義如何顯示HTML元素。 當瀏覽器讀到一個樣式表&#xff0c;它就會按照這個樣式表來對文檔進行格式化&#xff08;渲染&#xff09;。 CSS樣式 CSS引入HTML 內部樣式與外部樣式 <!DOCTYPE> …

如何還原桌面圖標_如何為Windows 10桌面圖標還原或更改文本的默認外觀?

如何還原桌面圖標For whatever reason, sooner or later we all have someone or something mess around with our keyboards and create ‘interesting’ results. With that in mind, today’s SuperUser Q&A post has a simple and elegant way to help a frustrated re…

「前端早讀君007」css進階之徹底理解視覺格式化模型

今日勵志 不論你在什么時候開始&#xff0c;重要的是開始之后不要停止。 前言 對于部分前端工程師來講&#xff0c;有時候CSS令他們很頭疼&#xff0c;明明設置了某個樣式&#xff0c;但是布局就是不起作用。 如果你也有這種問題&#xff0c;那么是時候學習下什么是css視覺格式…

.NET周報【11月第3期 2022-11-22】

國內文章.NET Conf China 2022 第一批講師陣容大揭秘&#xff01;整個期待了&#xff01;https://mp.weixin.qq.com/s/4p89hhBPw6qv-0OB_T_TOg目光看過來 2022 年 12 月 3-4 日&#xff0c;一場社區性質的國內規模最大的 線上線下.NET Conf 2022 技術大會 即將盛大開幕。目前大…

解讀Facebook CAN:如何給人工智能賦予藝術創作的力量

雷鋒網 AI 科技評論按&#xff1a;能夠迭代進化、模仿指定數據特征的GAN&#xff08;生成式對抗性網絡&#xff09;已經是公認的處理圖像生成問題的好方法&#xff0c;自從提出以來相關的研究成果不少&#xff0c;在圖像增強、超分辨率、風格轉換任務中的效果可謂是驚人的。 &a…

全向輪底盤磁導軌尋跡

全向輪底盤上安裝兩條磁傳感器帶用于磁導軌尋跡 如簡圖所示&#xff0c;兩條與Y直線相交的黑色線條我們認為是兩條磁檢測傳感器帶 矢量方法修正車體位置 定義軌道左為負向&#xff0c;軌道右為正向。傳感器左檢測為負&#xff0c;右檢測為正&#xff1b; 定義底盤坐標系為αβ&…

02-1.CSS邊框,邊界,布局相關筆記

目錄 CSS盒子模型 padding內填充 邊框 邊框屬性 border-radius margin外邊距 CSS盒子模型 Content(內容): 盒子的內容&#xff0c;顯示文本和圖像 >>>>類似word 文字A&#xff0c;改變字體與大小padding: 用于控制內容與邊框之間的距離 …

圖表庫

在2018年最后一天開源了自己的基于svg圖表庫mcharts 后面要大量時間去維護 mcharts 希望多提Issues 具體用法可以看文檔 可以一塊探討下技術問題 2019年新的開始新的起點 加油

android仿ios彈框_在“提示”框中:iOS外觀(在Android上運行),Google Maps作為Time Machine,下載Wii游戲保存...

android仿ios彈框Once a week we round up some great reader tips and share them with everyone. Read on to see how to make your Android phone look like iOS, use a Google Maps mashup like a time machine, and download Wii game saves. 每周一次&#xff0c;我們收集…

使用 C# 開發的摸魚背單詞軟件 ToastFish

你好&#xff0c;這里是 Dotnet 工具箱&#xff0c;定期分享 Dotnet 有趣&#xff0c;實用的工具和組件&#xff0c;希望對您有用&#xff01;摸魚神器ToastFish 是一個使用 C# 開發的桌面軟件&#xff0c;由 Uahh 開發&#xff0c; 這是一個利用Windows通知欄背單詞的軟件&…

使用log4Net 輸出日志到mongodb

將日志輸入到nosql 數據庫可以保證日志輸出速度和統一管理日志&#xff0c;log4mongo-net 項目http://log4mongo.org/display/PUB/Log4mongofor.NET使用log4net把日志保存到Mongodb。通常可用于代替log4netMS SSQL logging &#xff0c;和SQL Server相比可以節省40%的存儲空間&…

03.JavaScript對DOM操作

JavaScript引入方式 外部引入 在head或者body中&#xff0c;添加以下代碼 <script type"text/javascript" src"js/demo.js"></script> 內部引入 在head或body中&#xff0c;定義script標簽&#xff0c;然后在script標簽里面寫js代碼 <…