Go 中禁用語句的高效日誌記錄
在關鍵路徑中,嵌入可以動態切換的調試/跟踪日誌記錄語句是有益的運轉時。這種做法非常適合調試離線生產系統或測試鏡像生產環境的系統。
但是,這種類型的日誌記錄有一個關鍵要求:禁用的語句必須對效能影響最小。在 C/C 中,這是透過 LOG 巨集實現的,該巨集抑制參數求值,直到檢查標誌為止。
在 Go 中實現禁用日誌記錄
在 Go 中模擬此行為提出了挑戰。將 io.Discard 與 log.Logger 一起使用不是一個選項,因為即使在停用時它也會格式化日誌訊息。
使用 EnabledLogger 結構的初始嘗試實現了 log.Logger 接口,根據 Enabled 啟用/禁用日誌記錄旗幟。但是,參數求值仍然不受抑制,可能會導致任意函數呼叫的效能問題。
兩種解決方法
要解決此問題,有兩種解決方法:
這兩種方法都會導致冗長且容易出錯的程式碼,從而為潛在的效能下降打開了大門。
其他選項
儘管Go有靜態評估規則,但還有一些附加選項:
雖然這些解決方案對於動態運行時配置並不理想,他們可以在特定場景中引入效能改進。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3