在Go 中追蹤日誌記錄,並最佳化掛起語句的效能
在關鍵路徑中,保留低階調試/追蹤日誌記錄語句可允許運行時配置以根據需要啟動它們。此日誌記錄對停用語句的影響應該最小,理想情況下僅限於布林檢查。
在 C/C 中,LOG 巨集僅在檢查標誌後進行評估,僅在啟用時呼叫輔助函數。 Go 如何實現這一點?
將 io.Discard 與 log.Logger 結合使用是無效的,因為無論停用與否,日誌訊息都會完全格式化。
一種方法是建立一個帶有 Enabled 標誌的 EnabledLogger 並委託 log.Logger 來處理日誌記錄。這解決了格式問題,但無論是否啟用,都會評估參數。
要延後參數評估,請考慮對複雜值使用 Stringify 包裝器。然而,這種方法仍然很冗長且容易出錯。
或者,在記錄之前手動檢查是否啟用。這更簡潔,但需要紀律以避免疏忽。
最終,Go 對參數的嚴格評估限制了選項。雖然運行時可配置性並不完美,但以下模式是可行的:
以上是如何在 Go 中實現高效的追蹤日誌記錄並優化掛起語句的效能?的詳細內容。更多資訊請關注PHP中文網其他相關文章!