自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

一篇文章帶你搞定 Python 中 Logging 模塊

開發(fā) 后端
本文以Pythonl基礎(chǔ)為例,主要介紹了logging模塊的基礎(chǔ)使用方法,以及在現(xiàn)實(shí)應(yīng)用中遇到的問題,進(jìn)行了詳細(xì)的解答。

[[435432]]

Hey,大家好呀,我是Go進(jìn)階者。

一、基礎(chǔ)使用

1. logging使用場景

日志是什么?這個不用多解釋。百分之九十的程序都需要提供日志功能。Python內(nèi)置的logging模塊,為我們提供了現(xiàn)成的高效好用的日志解決方案。但是,不是所有的場景都需要使用logging模塊,

下面是Python官方推薦的使用方法:(來源百度)

任務(wù)場景 最佳工具
普通情況下,在控制臺顯示輸出 print()
報(bào)告正常程序操作過程中發(fā)生的事件 logging.info()(或者更詳細(xì)的logging.debug())
發(fā)出有關(guān)特定事件的警告 warnings.warn()或者logging.warning()
報(bào)告錯誤 彈出異常
在不引發(fā)異常的情況下報(bào)告錯誤 logging.error(), logging.exception()或者logging.critical()

logging模塊定義了下表所示的日志級別,按事件嚴(yán)重程度由低到高排列(注意是全部大寫!因?yàn)樗鼈兪浅A俊?:

  1. import logging 
  2. logging.basicConfig(level = logging.INFO,format = '%(asctime)s - %(name)s - %(levelname)s - %(message)s'
  3. logger = logging.getLogger(__name__) 
  4.  
  5. logger.info("Start print log"
  6. logger.debug("Do something"
  7. logger.warning("Something maybe fail."
  8. logger.info("Finish"

logging中可以選擇很多消息級別,如debug、info、warning、error以及critical。通過賦予logger或者h(yuǎn)andler不同的級別,開發(fā)者就可以只輸出錯誤信息到特定的記錄文件,或者在調(diào)試時只記錄調(diào)試信息。

  1. logging.basicConfig(level = logging.DEBUG,format = '%(asctime)s - %(name)s - %(levelname)s - %(message)s'

例如,我們將logger的級別改為DEBUG,

再觀察一下輸出結(jié)果:

控制臺輸出,可以發(fā)現(xiàn),輸出了debug的信息。

  • logging.basicConfig函數(shù)各參數(shù):
  • filename:指定日志文件名;
  • filemode:和file函數(shù)意義相同,指定日志文件的打開模式,'w'或者'a';
  • format:指定輸出的格式和內(nèi)容,format可以輸出很多有用的信息。
  • datefmt:指定時間格式,同time.strftime();
  • level:設(shè)置日志級別,默認(rèn)為logging.WARNNING;
  • stream:指定將日志的輸出流,可以指定輸出到sys.stderr,sys.stdout或者文件,默認(rèn)輸出到sys.stderr,當(dāng)stream和filename同時指定時,stream被忽略;
  1. #參數(shù):作用 
  2. %(levelno)s:打印日志級別的數(shù)值 
  3. %(levelname)s:打印日志級別的名稱 
  4. %(pathname)s:打印當(dāng)前執(zhí)行程序的路徑,其實(shí)就是sys.argv[0] 
  5. %(filename)s:打印當(dāng)前執(zhí)行程序名 
  6. %(funcName)s:打印日志的當(dāng)前函數(shù) 
  7. %(lineno)d:打印日志的當(dāng)前行號 
  8. %(asctime)s:打印日志的時間 
  9. %(thread)d:打印線程ID 
  10. %(threadName)s:打印線程名稱 
  11. %(process)d:打印進(jìn)程ID 
  12. %(message)s:打印日志信息 

2. 將日志寫入到文件

設(shè)置logging,創(chuàng)建一個FileHandler,并對輸出消息的格式進(jìn)行設(shè)置,將其添加到logger,然后將日志寫入到指定的文件。

  1. import logging 
  2. logger = logging.getLogger(__name__) 
  3. logger.setLevel(level = logging.INFO) 
  4. handler = logging.FileHandler("log.txt"
  5. handler.setLevel(logging.INFO) 
  6. formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s'
  7. handler.setFormatter(formatter) 
  8. logger.addHandler(handler) 
  9.  
  10. logger.info("Start print log"
  11. logger.debug("Do something"
  12. logger.warning("Something maybe fail."
  13. logger.info("Finish"

打開log.txt文件。

2. 將日志同時輸出到屏幕和日志文件

logger中添加StreamHandler,可以將日志輸出到屏幕上

  1. import logging 
  2. logger = logging.getLogger(__name__) 
  3. logger.setLevel(level = logging.INFO) #添加StreamHandler 
  4. handler = logging.FileHandler("log.txt"
  5. handler.setLevel(logging.INFO) 
  6. formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s'
  7. handler.setFormatter(formatter) 
  8.  
  9. console = logging.StreamHandler() 
  10. console.setLevel(logging.INFO)  #添加StreamHandler 
  11.  
  12. logger.addHandler(handler) 
  13. logger.addHandler(console) 
  14.  
  15. logger.info("Start print log"
  16. logger.debug("Do something"
  17. logger.warning("Something maybe fail."
  18. logger.info("Finish"

控制臺信息。

log.text信息。

3. 設(shè)置消息的等級

可以設(shè)置不同的日志等級,用于控制日志的輸出。

  1. #日志等級:使用范圍 
  2. FATAL:致命錯誤 
  3. CRITICAL:特別糟糕的事情,如內(nèi)存耗盡、磁盤空間為空,一般很少使用 
  4. ERROR:發(fā)生錯誤時,如IO操作失敗或者連接問題 
  5. WARNING:發(fā)生很重要的事件,但是并不是錯誤時,如用戶登錄密碼錯誤 
  6. INFO:處理請求或者狀態(tài)變化等日常事務(wù) 
  7. DEBUG:調(diào)試過程中使用DEBUG等級,如算法中每個循環(huán)的中間狀態(tài) 

4. 捕獲traceback

Python中的traceback模塊被用于跟蹤異常返回信息,可以在logging中記錄下traceback.

  1. import logging 
  2. logger = logging.getLogger(__name__) 
  3. logger.setLevel(level = logging.INFO) 
  4. handler = logging.FileHandler("log.txt"
  5. handler.setLevel(logging.INFO) 
  6. formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s'
  7. handler.setFormatter(formatter) 
  8.  
  9. console = logging.StreamHandler() 
  10. console.setLevel(logging.INFO) 
  11.  
  12. logger.addHandler(handler) 
  13. logger.addHandler(console) 
  14.  
  15. logger.info("Start print log"
  16. logger.debug("Do something"
  17. logger.warning("Something maybe fail."
  18. try: 
  19.     open("sklearn.txt","rb"
  20. except (SystemExit,KeyboardInterrupt): 
  21.     raise 
  22. except Exception: 
  23.     logger.error("Faild to open sklearn.txt from logger.error",exc_info = True
  24.  
  25. logger.info("Finish"

控制臺和日志文件log.txt中輸出。

可以使用logger.exception(msg,args),它等價于logger.error(msg,exc_info = True,args)。

將logger.error("Faild to open sklearn.txt from logger.error",exc_info = True)

替換為logger.exception("Failed to open sklearn.txt from logger.exception")

控制臺和日志文件log.txt中輸出。

二、總結(jié)

本文以Pythonl基礎(chǔ)為例,主要介紹了logging模塊的基礎(chǔ)使用方法,以及在現(xiàn)實(shí)應(yīng)用中遇到的問題,進(jìn)行了詳細(xì)的解答。

通過一些案例的講解和運(yùn)行效果圖的截取,使用Python語言,能夠幫助讀者更好的去理解Python。 

我是Go進(jìn)階者,如果覺得還不錯,記得動手點(diǎn)贊一下哈。感謝你的觀看!

 

責(zé)任編輯:武曉燕 來源: Go語言進(jìn)階學(xué)習(xí)
相關(guān)推薦

2021-11-10 09:19:41

PythonShutil模塊

2024-04-17 13:21:02

Python匿名函數(shù)

2021-05-15 10:16:14

Python匿名函數(shù)

2020-02-28 11:29:00

ElasticSear概念類比

2021-03-06 10:05:03

Python函數(shù)變量

2021-11-13 10:11:45

Pythonurllib庫Python基礎(chǔ)

2022-05-28 15:59:55

PythonPandas數(shù)據(jù)可視化

2022-03-30 10:51:40

JavaScript性能調(diào)優(yōu)

2021-05-15 09:18:04

Python進(jìn)程

2021-05-05 11:29:53

Pythonpyglet開發(fā)模塊

2021-03-15 08:38:42

StringBuffeJava基礎(chǔ)Java開發(fā)

2021-05-18 09:00:28

Pythonclass

2022-02-21 09:44:45

Git開源分布式

2023-05-12 08:19:12

Netty程序框架

2021-06-30 00:20:12

Hangfire.NET平臺

2021-03-24 10:00:32

Python遞歸函數(shù)Python基礎(chǔ)

2021-04-24 10:19:41

Python函數(shù)指向

2025-02-19 10:39:26

Python高階函數(shù)函數(shù)名

2021-02-20 10:06:14

語言文件操作

2021-02-27 10:20:18

Go語言flag包開發(fā)技術(shù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號