在大型項目中,往往需要記錄一些運行日志便于排錯和分析。Python中內置的logging模塊可以方便地實現日志功能,同時可以通過添加跟蹤號來追蹤一個請求在代碼執行過程中的狀態。
在使用logging模塊記錄日志時,我們可以通過添加extra參數來傳遞一些額外的信息,例如在Flask框架中可以傳遞request對象。我們可以通過類似下面的代碼來添加跟蹤號:
import logging def log_request(request): log_extra = {'request_id': request.headers.get('X-Request-ID', None)} logger = logging.getLogger(__name__) logger = logging.LoggerAdapter(logger, log_extra) logger.info('Request received')
上述代碼創建了一個LoggerAdapter對象,通過extra參數傳遞了一個log_extra字典,其中包含了鍵值為'request_id'的請求ID。我們可以在任意一個日志記錄方法中使用logger.info / logger.error等方法記錄日志,并從日志信息中獲取到添加的跟蹤號。
可以通過類似下面的代碼來獲取日志中的跟蹤號:
import logging logging.basicConfig(level=logging.INFO) logger = logging.getLogger(__name__) def func(): request_id = '1a2b3c' logger.info(f'Request started, ID: {request_id}') # do something func()
使用basicConfig方法,我們配置了logging模塊的默認輸出級別為INFO,然后通過getLogger方法獲取了一個logger對象。在函數func中我們添加了一個請求ID信息,并使用logger.info方法記錄了這個信息,我們可以從日志信息中獲取到這個請求ID。
通過為每個請求添加唯一的請求ID,我們可以追蹤一個請求在代碼執行過程中的狀態,方便我們進行跟蹤和排錯。