Go 中禁用語句的高效日誌記錄
在關鍵路徑中,嵌入可在以下位置動態切換的調試/跟踪日誌記錄語句是有益的運行時。這種做法非常適合調試離線生產系統或測試鏡像生產環境的系統。
但是,這種類型的日誌記錄有一個關鍵要求:停用的語句必須對效能影響最小。在 C/C 中,這是透過 LOG 巨集實現的,該巨集抑制參數求值,直到檢查標誌為止。
在 Go 中實作停用日誌記錄
在 Go 中模擬此行為提出了挑戰。將 io.Discard 與 log.Logger 一起使用不是一個選項,因為即使在停用時它也會格式化日誌訊息。
使用 EnabledLogger 結構的初始嘗試實現了 log.Logger 接口,根據 Enabled 啟用/禁用日誌記錄旗幟。但是,參數求值仍然不受抑制,可能會導致任意函數呼叫的效能問題。
兩種解決方法
要解決這個問題,有兩種解決方法:
其他選項
儘管Go 有靜態評估規則,但還有一些附加選項:以上是Go中如何實現禁用語句的高效日誌記錄?的詳細內容。更多資訊請關注PHP中文網其他相關文章!