隨着技術的進步,日誌成為了應用程序開發中不可或缺的一部分,它可以記錄代碼的運行情況,幫助開發者找出應用程序中的錯誤和異常,並及時對其進行修復。
一、Python中的日誌模塊
Python的標準庫中擁有一個日誌模塊logging,它提供了非常強大的日誌處理功能,可以根據各自的需求來靈活配置日誌記錄的級別、輸出格式、輸出位置、日誌輪換等等。通過logging模塊,我們可以方便地將應用程序中的各種調試信息、錯誤信息、警告信息等進行統一地記錄和管理。
import logging
logging.basicConfig(level=logging.DEBUG,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__)
if __name__ == '__main__':
logger.debug('debug message')
logger.info('info message')
logger.warning('warning message')
logger.error('error message')
logger.critical('critical message')
上述代碼中,我們引入了logging模塊,通過basicConfig函數配置日誌的級別和輸出格式,然後定義了Logger對象,並在main函數中分別生成了debug、info、warning、error和critical級別的日誌信息,最終將這些日誌信息輸出。
二、日誌的級別
在logging模塊中,我們可以使用basicConfig函數來設置日誌的級別,一共有5種級別,從高到低分別是CRITICAL(50)、ERROR(40)、WARNING(30)、INFO(20)和DEBUG(10),默認的級別為WARNING。
- CRITICAL:嚴重錯誤
- ERROR:一般錯誤
- WARNING:警告信息
- INFO:一般信息
- DEBUG:調試信息
三、日誌的格式化
logging模塊中提供了套路的日誌格式化,可以通過format參數來自定義日誌的格式。
以下是一些常用的日誌格式化佔位符:
- %(name)s:日誌器名稱
- %(levelno)s:日誌級別的數字表示
- %(levelname)s:日誌級別的文本表示
- %(pathname)s:當前執行程序的路徑
- %(filename)s:當前執行程序名稱
- %(module)s:模塊名稱
- %(funcName)s:函數名稱
- %(lineno)d:當前代碼執行行號
- %(asctime)s:當前時間
- %(message)s:日誌信息
import logging
LOG_FORMAT = "%(asctime)s - %(levelname)s - %(message)s"
logging.basicConfig(level=logging.DEBUG, format=LOG_FORMAT)
logger = logging.getLogger(__name__)
if __name__ == '__main__':
logger.debug('debug message')
logger.info('info message')
logger.warning('warning message')
logger.error('error message')
logger.critical('critical message')
上述代碼中,我們定義了一個常量LOG_FORMAT,它表示了日誌的格式,最終日誌信息的格式化展示就基於這個常量來。
四、日誌的輸出位置
在使用logging模塊記錄日誌時,我們還可以指定日誌輸出的位置,包括控制台、文件、遠程服務器等等。下面介紹如何將日誌信息輸出到文件中。
import logging
LOG_FORMAT = "%(asctime)s - %(name)s - %(levelname)s - %(message)s"
logging.basicConfig(filename='my.log', level=logging.DEBUG, format=LOG_FORMAT)
logger = logging.getLogger(__name__)
if __name__ == '__main__':
logger.debug('debug message')
logger.info('info message')
logger.warning('warning message')
logger.error('error message')
logger.critical('critical message')
在定義Logger對象的時候,我們可以通過basicConfig函數的filename參數來指定日誌的文件名,這樣就可以將所有的日誌信息都輸出到這個文件中。
五、日誌的輪換和歸檔
使用logging模塊記錄日誌時,如果不進行文件輪換和歸檔,那麼一個應用程序可以生成大量的日誌文件,這樣會佔用大量的磁盤空間,也不利於日誌的查閱和管理。為了解決這個問題,logging模塊提供了多種方式對日誌進行輪換和歸檔。
下面演示一個基於時間輪換的歸檔,即每半天產生一個新的日誌文件,並存放到指定的目錄下,舊的日誌文件則被歸檔到一個新的文件中。
import logging
from logging.handlers import TimedRotatingFileHandler
LOG_FORMAT = "%(asctime)s - %(name)s - %(levelname)s - %(message)s"
logging.basicConfig(level=logging.DEBUG, format=LOG_FORMAT)
logger = logging.getLogger(__name__)
handler = TimedRotatingFileHandler(filename='my.log', when='midnight', interval=1, backupCount=7)
handler.setFormatter(logging.Formatter(LOG_FORMAT))
logger.addHandler(handler)
if __name__ == '__main__':
logger.debug('debug message')
logger.info('info message')
logger.warning('warning message')
logger.error('error message')
logger.critical('critical message')
在上述代碼中,我們使用了TimedRotatingFileHandler對象來代替basicConfig函數中的filename參數,通過when、interval和backupCount參數來控制日誌的輪換和歸檔。
總結
在本文中,我們介紹了Python中logging模塊的基本用法,包括日誌的級別、格式化、輸出位置和日誌輪換等方面。對於任何一款應用程序而言,日誌都是必不可少的一部分,它可以幫助開發者快速定位並解決應用程序中的錯誤和異常,提高代碼的健壯性和穩定性。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/180045.html