欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python?logging日志模塊的概念與實踐講解

 更新時間:2023年07月19日 15:12:00   作者:techlead_krischang  
本文通過具體的代碼示例為大家解釋了如何高效地使用logging模塊進行日志記錄,以及如何避免常見的陷阱,希望可以幫助大家更好地掌握這個強大的工具

一、Python 日志模塊簡介

日志的概念及其在軟件開發(fā)中的作用

在開發(fā)過程中,為了記錄應用程序的運行情況,通常我們會采用打印日志的方式,這種方式不僅可以幫助我們了解軟件系統(tǒng)的運行狀態(tài),還可以在系統(tǒng)出現錯誤時,幫助我們快速定位問題。

例如,假設你有以下一段代碼,它只是簡單地輸出一些信息:

print("This is some information.")

輸出:

This is some information.

但是,如果我們需要記錄更復雜的信息,如錯誤信息、警告或者其他重要的運行時信息,僅僅使用print就顯得力不從心。這就是我們需要日志模塊的地方。

Python logging日志模塊簡介

Python內置的logging模塊為我們提供了一套完整的日志記錄解決方案。在許多情況下,你可能希望你的應用程序能夠在運行時輸出某種形式的狀態(tài)信息,特別是當應用程序需要處理長時間運行的任務,或者當你面臨需要診斷的問題時,logging模塊便是你的得力助手。

logging模塊可以幫助我們捕獲、處理和記錄日志信息,使得我們可以在程序運行的任何地方快速記錄日志信息。相比于簡單的print函數,它更具有靈活性,能夠同時輸出日志到多個地方,如:控制臺、文件、HTTP GET/POST,SMTP,Socket等,并且可以獨立設置每個輸出的日志等級。

以下是一個簡單的例子來說明如何使用logging模塊:

import logging
# Create a logger and set the log level to INFO
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)
# Add a StreamHandler to send log messages to console
console_handler = logging.StreamHandler()
logger.addHandler(console_handler)
# Log an informational message
logger.info("This is an informational message.")

這段代碼會輸出以下信息到控制臺:

This is an informational message.

logging模塊的基本組成

logging模塊主要由以下幾個部分組成:

Logger: 用于提供應用程序直接使用的接口。

Handler: 將(logger產生的)日志記錄發(fā)送到合適的目的輸出。

Filter: 提供了更精細的工具來決定輸出哪些日志記錄。

Formatter: 指定日志記錄的最終輸出格式。

二、logging日志模塊詳解

logging的基礎使用

使用Python的logging模塊相當簡單,下面是一個基本的例子,說明如何創(chuàng)建一個日志并輸出到控制臺。

import logging
# This will log the message to the console
logging.warning('This is a warning message')

這段代碼將輸出以下警告信息:

WARNING:root:This is a warning message

理解日志級別

在logging模塊中,我們有5個級別來描述日志的重要性。這些級別分別是:

DEBUG:詳細信息,通常僅在診斷問題時使用。

INFO:確認事情按預期進行。

WARNING:出現了一些預期之外的事情,或者在不久的將來可能出現問題(例如,“磁盤空間不足”)。但是軟件仍在正常工作。

ERROR:由于更嚴重的問題,軟件不能執(zhí)行某些功能。

CRITICAL:嚴重的錯誤,表明程序本身可能無法繼續(xù)運行。

默認情況下,logging模塊將日志記錄到控制臺,并且只處理級別為WARNING以上的日志。

Loggers、Handlers和Formatters

這一部分我們將會詳解Loggers、Handlers和Formatters這三個主要組件。

Loggers的作用和使用

Logger是一個日志對象,主要任務就是記錄日志。在應用程序代碼中任何需要日志的地方,都可以創(chuàng)建一個logger實例,并用其記錄需要的信息。下面是一個簡單的使用logger的例子:

import logging
# Create a logger
logger = logging.getLogger(__name__)
# Log some messages
logger.debug("This is a debug message.")
logger.info("This is an informational message.")
logger.warning("Careful! Something does not look right.")
logger.error("You have encountered an error.")
logger.critical("The program cannot recover from this situation!")

注意:當我們運行這段代碼時,我們并沒有看到任何輸出。這是因為默認情況下,logger的級別設置為WARNING,因此只有級別為WARNING以上的日志會被處理。

Handlers的種類和作用

Handler對象負責發(fā)送日志記錄到合適的目的地。不同的handler可以將日志發(fā)送到控制臺,文件,郵件,甚至HTTP POST參數等。下面是一個簡單的例子,說明如何使用handler將日志記錄到文件和控制臺:

import logging
# Create a logger
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)
# Create a file handler
file_handler = logging.FileHandler('my_log.log')
logger.addHandler(file_handler)
# Create a console handler
console_handler = logging.StreamHandler()
logger.addHandler(console_handler)
# Log some messages
logger.debug("This is a debug message.")
logger.info("This is an informational message.")
logger.warning("Careful! Something does not look right.")
logger.error("You have encountered an error.")
logger.critical("The program cannot recover from this situation!")

Formatters的功能和自定義日志格式

Formatter對象指定日志記錄的最終順序,結構和內容。你可以自定義日志信息的格式,使得日志信息更具有可讀性。下面是一個如何使用formatter的例子:

import logging
# Create a logger
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)
# Create a console handler
console_handler = logging.StreamHandler()
# Create a formatter
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
# Add the formatter to the console handler
console_handler.setFormatter(formatter)
# Add the console handler to the logger
logger.addHandler(console_handler)
# Log some messages
logger.debug("This is a debug message.")
logger.info("This is an informational message.")
logger.warning("Careful! Something does not look right.")
logger.error("You have encountered an error.")
logger.critical("The program cannot recover from this situation!")

三、Python日志模塊在實踐中的應用

使用日志記錄異常信息

在Python編程中,經常需要捕獲和處理異常。這時,使用logging模塊記錄異常信息會非常方便。在logging模塊中,我們可以使用exception()方法記錄異常堆棧信息。如下例所示:

import logging
logger = logging.getLogger(__name__)
try:
    a = [1, 2, 3]
    value = a[3]
except IndexError as e:
    logger.error("Unhandled exception", exc_info=True)
		```
當運行此段代碼,日志記錄器將記錄下出現的異常信息,如下:
```python
ERROR:__main__:Unhandled exception
Traceback (most recent call last):
  File "<stdin>", line 4, in <module>
IndexError: list index out of range

使用RotatingFileHandler進行日志滾動

當我們的應用程序運行很長時間,并產生大量的日志時,所有的日志都寫入一個文件可能會導致這個日志文件過大。這時,我們可以使用RotatingFileHandler來進行日志滾動。當達到一定的大小或者一定的時間,RotatingFileHandler會自動備份當前日志文件,并創(chuàng)建一個新的日志文件繼續(xù)寫入。如下例所示:

import logging
from logging.handlers import RotatingFileHandler
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)
# Create a file handler
handler = RotatingFileHandler('my_log.log', maxBytes=2000, backupCount=10)
logger.addHandler(handler)
# Log some messages
for _ in range(10000):
    logger.info("Hello, world!")
		```
##這段代碼將在日志文件大小達到2000字節(jié)時創(chuàng)建一個新的日志文件,并保留最新的10個日志文件。
## 配置日志級別
##根據我們的需要,可以在運行時改變日志的級別。例如,當我們在調試應用程序時,我們可能需要輸出所有級別的日志。但是在生產環(huán)境中,我們可能只關心錯誤及以上級別的日志。我們可以通過setLevel()函數來改變日志級別。如下例所示:
```python
import logging
# Create a logger
logger = logging.getLogger(__name__)
# Set log level to DEBUG
logger.setLevel(logging.DEBUG)
# Log some messages
logger.debug("This is a debug message.")
logger.info("This is an informational message.")
logger.warning("Careful! Something does not look right.")
logger.error("You have encountered an error.")
logger.critical("The program cannot recover from this situation!")

四、Python日志模塊的最佳實踐

在模塊級別使用__name__創(chuàng)建logger

在Python中,__name__變量是一個內置變量,它代表當前模塊的名稱。當我們在每個模塊級別上創(chuàng)建logger并使用__name__作為名稱,我們可以輕松地追蹤日志記錄發(fā)生在哪個模塊。

import logging
# Create a logger at the module level
logger = logging.getLogger(__name__)

使用合適的日志級別

不同的日志級別表示了不同的嚴重性。正確地使用日志級別可以幫助我們在大量的日志中找到我們關心的信息。一般來說,對于非常嚴重的錯誤,我們應使用CRITICAL或ERROR;對于警告信息,我們應使用WARNING;對于常規(guī)的運行信息,我們應使用INFO;對于調試信息,我們應使用DEBUG。

使用結構化的日志消息

當我們的應用程序有大量的日志時,我們可能希望以一種可解析的方式記錄日志消息。例如,我們可以使用JSON格式記錄日志。這樣,我們就可以使用各種日志分析工具分析日志。

import logging
import json
# Create a logger
logger = logging.getLogger(__name__)
# Log a structured message
logger.info(json.dumps({
    'action': 'User login',
    'username': 'user123',
    'ip_address': '123.123.123.123',
    'status': 'success',
}))

使用異常日志記錄

當捕獲到異常時,我們應使用logger.exception(),這樣就可以在日志中記錄下完整的異常堆棧信息。

import logging
logger = logging.getLogger(__name__)
try:
    x = 1 / 0
except ZeroDivisionError:
    logger.exception("Zero Division Error Caught.")

這樣的日志會包含足夠的信息幫助我們找到和修復問題。

不要在日志中記錄敏感信息

日志可能被攻擊者用來尋找系統(tǒng)的漏洞,因此我們絕對不能在日志中記錄敏感信息,如密碼、密鑰和用戶的私有數據。

五、總結

在這篇文章中,我們詳細介紹了Python的logging模塊,包括它的基本介紹,詳解,實踐中的應用,以及一些最佳實踐??偨Y上述內容:

  • logging模塊是Python內置的一種靈活且強大的日志記錄工具,它可以將程序運行過程中的信息輸出到各種輸出源,如標準輸出、文件、郵件、網絡等。
  • logging模塊提供了多種級別的日志記錄,包括DEBUG,INFO,WARNING,ERROR和CRITICAL。我們可以根據需求設置不同的日志級別,以記錄和展示不同嚴重性的信息。
  • 在實踐中,我們可以使用logging模塊來記錄異常信息,使用RotatingFileHandler進行日志滾動,以及在運行時改變日志級別。
  • 對于logging模塊的最佳實踐,我們提到了在模塊級別使用__name__創(chuàng)建logger,使用合適的日志級別,使用結構化的日志消息,使用異常日志記錄,以及不在日志中記錄敏感信息。

到此這篇關于Python logging日志模塊的概念與實踐講解的文章就介紹到這了,更多相關Python logging日志模塊內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • python tkinter圖形界面代碼統(tǒng)計工具(更新)

    python tkinter圖形界面代碼統(tǒng)計工具(更新)

    這篇文章主要為大家詳細介紹了python tkinter圖形界面代碼統(tǒng)計工具,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-09-09
  • 使用Python開發(fā)一個簡單的本地圖片服務器

    使用Python開發(fā)一個簡單的本地圖片服務器

    本文介紹了如何結合wxPython構建的圖形用戶界面GUI和Python內建的 Web服務器功能,在本地網絡中搭建一個私人的,即開即用的網頁相冊,文中的示例代碼講解詳細,感興趣的小伙伴可以嘗試一下
    2025-04-04
  • Python自動化測試基礎必備知識點總結

    Python自動化測試基礎必備知識點總結

    在本篇文章里小編給大家分享的是一篇關于Python自動化測試基礎必備知識點總結內容,有興趣的朋友們可以學習下。
    2021-02-02
  • python實現簡單文件讀寫函數

    python實現簡單文件讀寫函數

    這篇文章主要為大家詳細介紹了python實現簡單文件讀寫函數,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-02-02
  • python3.6.3轉化為win-exe文件發(fā)布的方法

    python3.6.3轉化為win-exe文件發(fā)布的方法

    今天小編就為大家分享一篇python3.6.3轉化為win-exe文件發(fā)布的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10
  • Django中models.model如何使用舉例詳解

    Django中models.model如何使用舉例詳解

    在現代Web開發(fā)中Django是一個非常流行的Web框架,它允許開發(fā)者快速構建強大而優(yōu)雅的Web應用程序,這篇文章主要介紹了Django中models.model如何使用的相關資料,需要的朋友可以參考下
    2025-04-04
  • python 魔法函數實例及解析

    python 魔法函數實例及解析

    這篇文章主要介紹了python 魔法函數實例及解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-09-09
  • 關于tensorflow和keras版本的對應關系

    關于tensorflow和keras版本的對應關系

    這篇文章主要介紹了關于tensorflow和keras版本的對應關系,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • 在python中解決死鎖的問題

    在python中解決死鎖的問題

    這篇文章主要介紹了在python中解決死鎖的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • Python隨手筆記第一篇(2)之初識列表和元組

    Python隨手筆記第一篇(2)之初識列表和元組

    Python中,列表和元組是一種數據結構:序列,序列中的每個元素都被分配一個序號,元素的位置,第一原元素的位置為0,因此類推,序列是最基本的數據結構,本文給大家分享Python隨手筆記第一篇(2)之初識列表和元組,感興趣的朋友一起學習吧
    2016-01-01

最新評論