Python中的Logging模塊在項目應用小結
在Python編程中,日志記錄(Logging)是一項至關重要的任務,它幫助我們跟蹤代碼的運行狀態(tài)、識別錯誤以及優(yōu)化程序性能。Python標準庫中的logging模塊為我們提供了強大而靈活的日志記錄功能。本文將介紹如何使用logging模塊,并探討其在Python開發(fā)中的實際應用。
一、基本使用
首先,我們需要導入logging模塊,并配置基本的日志記錄器(Logger)。以下是一個簡單的示例:
python import logging # 配置日志記錄器 logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s', filename='example.log', filemode='w') # 在代碼中使用日志記錄器 logging.debug('This is a debug message.') logging.info('This is an info message.') logging.warning('This is a warning message.') logging.error('This is an error message.') logging.critical('This is a critical message.')
在這個示例中,我們首先通過basicConfig方法配置了日志記錄器。level參數(shù)用于設置日志級別,這里我們設置為DEBUG,意味著所有級別的日志都會被記錄。format參數(shù)用于定義日志消息的格式,包括時間戳、日志級別和消息內(nèi)容。filename參數(shù)指定了日志文件的名稱,filemode參數(shù)用于設置文件的打開模式。
接下來,我們在代碼中使用了不同級別的日志記錄方法,如debug、info、warning、error和critical。這些方法會根據(jù)配置的日志級別來決定是否記錄消息。
二、高級配置
除了基本配置外,logging模塊還支持更高級的配置選項,以滿足復雜的日志記錄需求。例如,我們可以創(chuàng)建多個日志記錄器,為每個記錄器設置不同的處理器(Handler)和格式化器(Formatter)。
以下是一個更復雜的示例,展示了如何創(chuàng)建多個日志記錄器,并將日志輸出到控制臺和文件:
python import logging # 創(chuàng)建一個日志記錄器 logger = logging.getLogger('my_logger') logger.setLevel(logging.DEBUG) # 創(chuàng)建一個控制臺處理器,將日志輸出到控制臺 console_handler = logging.StreamHandler() console_handler.setLevel(logging.INFO) # 創(chuàng)建一個文件處理器,將日志輸出到文件 file_handler = logging.FileHandler('example.log') file_handler.setLevel(logging.DEBUG) # 創(chuàng)建一個格式化器,定義日志消息的格式 formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') # 將格式化器添加到處理器中 console_handler.setFormatter(formatter) file_handler.setFormatter(formatter) # 將處理器添加到記錄器中 logger.addHandler(console_handler) logger.addHandler(file_handler) # 在代碼中使用日志記錄器 logger.debug('This is a debug message.') logger.info('This is an info message.') logger.warning('This is a warning message.') logger.error('This is an error message.') logger.critical('This is a critical message.')
在這個示例中,我們首先創(chuàng)建了一個名為my_logger的日志記錄器,并設置了日志級別為DEBUG。然后,我們創(chuàng)建了一個控制臺處理器和一個文件處理器,并分別為它們設置了日志級別和格式化器。最后,我們將這兩個處理器添加到了記錄器中。這樣,當我們使用logger對象記錄日志時,消息會同時輸出到控制臺和文件中。
三、日志模塊結構
組件名稱 | 對應的類 | 對應描述 |
---|---|---|
日志記錄器 | Logger | 提供了應用程序的日志記錄功能 |
處理器 | Handler | 提供日志的一條處理方式 |
過濾器 | Filter | 提供了更細顆粒的控制工具來決定輸出日志的記錄 |
格式化器 | Formmtter | 提供日志的格式 |
四、項目中應用
如下的代碼為django項目中使用日志記錄模塊的示例
import os import logging import sys from django.conf import settings from datetime import datetime os.makedirs(settings.LOGS, exist_ok=True) class Logger: _instance = None def __init__(self): self.format = '%(asctime)s %(thread)d %(threadName)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s' # django中項目的名稱 self.logger = logging.getLogger(settings.PROJECTNAME) self.logger.setLevel(logging.DEBUG) self.add_stream_handle() self.file = os.path.join(settings.LOGS, f'{datetime.now().strftime("%Y%m%d_%H%M%S")}.log') self.add_file_handle(self.file) def add_stream_handle(self): handler = logging.StreamHandler(sys.stdout) handler.setLevel(level=logging.INFO) handler.setFormatter(logging.Formatter(self.format)) self.logger.addHandler(handler) def add_file_handle(self, file): handler = logging.FileHandler(file, encoding="utf-8") handler.setLevel(level=logging.DEBUG) handler.setFormatter(logging.Formatter(self.format)) self.logger.addHandler(handler) @classmethod def get_logger(cls): # 初始化一次,通常__init__.py文件中調(diào)用 if cls._instance is None: cls._instance = Logger().logger return cls._instance Logger.get_logger()
# 其他模塊中使用 import logging from django.conf import settings logger = logging.getLogger(settings.PROJECTNAME) logger.info("INFO") logger.warning("WARNING") logger.error("ERROR")
到此這篇關于Python中的Logging模塊在項目應用小結的文章就介紹到這了,更多相關Python Logging模塊內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
python讀取并顯示圖片的三種方法(opencv、matplotlib、PIL庫)
這篇文章主要給大家介紹了關于python讀取并顯示圖片的三種方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-04-04高質(zhì)量Python代碼編寫的5個優(yōu)化技巧
這篇文章主要為大家詳細介紹了編寫高質(zhì)量Python代碼的5個優(yōu)化技巧,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-11-11在Python中使用itertools模塊中的組合函數(shù)的教程
這篇文章主要介紹了在Python中使用itertools模塊中的組合函數(shù)的教程,來自IBM官方技術文檔,需要的朋友可以參考下2015-04-04Pytorch?PyG實現(xiàn)EdgePool圖分類
這篇文章主要為大家介紹了Pytorch?PyG實現(xiàn)EdgePool圖分類示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-04-04windows python3安裝Jupyter Notebooks教程
這篇文章主要介紹了windows python3安裝Jupyter Notebooks教程,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-04-04Blueprint實現(xiàn)路由分組及Flask中session的使用詳解
這篇文章主要為大家介紹了Blueprint實現(xiàn)路由分組及Flask中session的使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-11-11django+celery+RabbitMQ自定義多個消息隊列的實現(xiàn)
本文主要介紹了django+celery+RabbitMQ自定義多個消息隊列的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-02-02