成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

開發 后端
本文以Pythonl基礎為例,主要介紹了logging模塊的基礎使用方法,以及在現實應用中遇到的問題,進行了詳細的解答。

[[435432]]

Hey,大家好呀,我是Go進階者。

一、基礎使用

1. logging使用場景

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

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

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

logging模塊定義了下表所示的日志級別,按事件嚴重程度由低到高排列(注意是全部大寫!因為它們是常量。):

  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或者handler不同的級別,開發者就可以只輸出錯誤信息到特定的記錄文件,或者在調試時只記錄調試信息。

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

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

再觀察一下輸出結果:

控制臺輸出,可以發現,輸出了debug的信息。

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

2. 將日志寫入到文件

設置logging,創建一個FileHandler,并對輸出消息的格式進行設置,將其添加到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. 設置消息的等級

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

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

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中輸出。

二、總結

本文以Pythonl基礎為例,主要介紹了logging模塊的基礎使用方法,以及在現實應用中遇到的問題,進行了詳細的解答。

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

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

 

責任編輯:武曉燕 來源: Go語言進階學習
相關推薦

2021-11-10 09:19:41

PythonShutil模塊

2021-05-15 10:16:14

Python匿名函數

2024-04-17 13:21:02

Python匿名函數

2020-02-28 11:29:00

ElasticSear概念類比

2021-03-06 10:05:03

Python函數變量

2021-11-13 10:11:45

Pythonurllib庫Python基礎

2022-05-28 15:59:55

PythonPandas數據可視化

2022-03-30 10:51:40

JavaScript性能調優

2021-05-15 09:18:04

Python進程

2021-05-05 11:29:53

Pythonpyglet開發模塊

2021-05-18 09:00:28

Pythonclass

2021-03-15 08:38:42

StringBuffeJava基礎Java開發

2022-02-21 09:44:45

Git開源分布式

2023-05-12 08:19:12

Netty程序框架

2021-06-30 00:20:12

Hangfire.NET平臺

2021-04-24 10:19:41

Python函數指向

2025-02-19 10:39:26

Python高階函數函數名

2021-05-31 08:59:57

Java數據庫訪問JDBC

2021-01-13 08:40:04

Go語言文件操作

2021-03-24 10:00:32

Python遞歸函數Python基礎
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩在线一区二区三区 | 99精品国产一区二区三区 | 在线91 | 亚洲一二三区精品 | 欧美11一13sex性hd | 九九久久国产精品 | 精品国产乱码久久久久久影片 | 欧美激情网站 | 伊人网站在线观看 | 亚洲一区 中文字幕 | 国产精品久久久久久久免费大片 | 久久精品二区 | 亚洲精品在线视频 | 日本中文字幕日韩精品免费 | 欧美日韩综合 | 久久久久久黄 | 日韩黄a| 日韩精品在线免费观看 | 成人午夜网站 | 一区二区三区在线免费观看 | 久久精品国产一区二区三区 | 伊人激情网 | 国产乱码久久久久久一区二区 | 亚洲福利av | 奇米久久| 中文在线a在线 | 一区二区在线 | 青青草华人在线视频 | 国产精品99免费视频 | 中文字幕日韩欧美一区二区三区 | 亚洲一区高清 | 91色在线| 日韩av一区在线观看 | 伊人99| 91看片免费版| 欧美日韩精选 | 亚洲综合免费 | 成人午夜影院 | aaaa网站 | 国产免费一区二区三区 | 免费看一级毛片 |