成人免费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函數變量

2022-05-28 15:59:55

PythonPandas數據可視化

2021-11-13 10:11:45

Pythonurllib庫Python基礎

2022-03-30 10:51:40

JavaScript性能調優

2021-05-15 09:18:04

Python進程

2021-03-15 08:38:42

StringBuffeJava基礎Java開發

2021-05-18 09:00:28

Pythonclass

2021-05-05 11:29:53

Pythonpyglet開發模塊

2022-02-21 09:44:45

Git開源分布式

2021-06-30 00:20:12

Hangfire.NET平臺

2023-05-12 08:19:12

Netty程序框架

2021-05-31 08:59:57

Java數據庫訪問JDBC

2021-01-13 08:40:04

Go語言文件操作

2021-02-20 10:06:14

語言文件操作

2021-02-27 10:20:18

Go語言flag包開發技術

2021-04-24 10:19:41

Python函數指向
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: av在线天堂网 | 亚洲精品久久久一区二区三区 | 99久久久久久| 国产精品综合 | 欧美精品一区二区在线观看 | 亚洲国产免费 | 麻豆一区 | 日韩高清中文字幕 | 二区视频 | 日日射影院| 三级成人在线 | 99精品99 | 在线观看成人小视频 | 免费二区| 国产午夜三级一区二区三 | 日本福利视频 | 麻豆成人在线视频 | 欧美精品三区 | 手机av在线 | 中文字幕日韩一区 | 国产精品久久久久久久久久久久午夜片 | 日韩色图视频 | 欧美性极品xxxx做受 | 二区三区在线观看 | 亚洲免费视频在线观看 | 国产毛片久久久久久久久春天 | 一区二区三区四区免费在线观看 | 国产成视频在线观看 | 色综合桃花网 | 人人爽人人爽人人片av | 国产高清无av久久 | 国产精品欧美一区二区三区 | 一级黄片一级毛片 | 亚洲成人一区二区 | 久久国产婷婷国产香蕉 | 国产精品久久国产精品 | 亚洲精品一区二三区不卡 | 成年免费大片黄在线观看一级 | 日本一二区视频 | 亚洲国产精品一区二区三区 | 2018天天干天天操 |