在Go 中,追蹤日誌記錄提出了一個獨特的挑戰:最大限度地減少關鍵路徑中停用日誌語句的成本。與 C/C 不同,Go 沒有預處理器宏,因此有必要探索替代解決方案。
一種方法涉及使用 fmt.Stringer 和 fmt.GoStringer 介面。透過延遲格式化直到日誌執行,可以避免日誌記錄參數中昂貴的函數呼叫:
type LogFormatter interface { LogFormat() string } // Inside the logger if i, ok := i.(LogFormatter); ok { fmt.Println(i.LogFormat()) }
另一種策略是在執行時使用記錄器介面或在建置時使用建置約束交換記錄器。但是,這需要確保不會將昂貴的呼叫插入到日誌記錄參數中。
第三個選項是將 Logger 本身定義為布林值,減少冗長,同時提供一種簡潔的方法來控制日誌記錄:
type Log bool func (l Log) Println(args ...interface{}) { fmt.Println(args...) } var debug Log = false if debug { debug.Println("DEBUGGING") }
最後,可以探索程式碼生成,儘管它不適合運行時配置。透過使用 gofmt -r 或使用文字/模板建立文件,可以為特定的偵錯場景建立單獨的偵錯版本。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3