「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Go で無効なトレース ロギング ステートメントのコストを最小限に抑えるにはどうすればよいですか?

Go で無効なトレース ロギング ステートメントのコストを最小限に抑えるにはどうすればよいですか?

2024 年 11 月 9 日に公開
ブラウズ:880

How to Minimize the Cost of Disabled Trace Logging Statements in Go?

無効なステートメントに対する Go の低コスト トレース ログ

Go のトレース ログには、クリティカル パスで無効になっているログ ステートメントのコストを最小限に抑えるという独特の課題があります。 C/C とは異なり、Go にはプリプロセッサ マクロがないため、代替ソリューションを検討する必要があります。

1 つのアプローチには、 fmt.Stringer および fmt.GoStringer インターフェイスの使用が含まれます。ログの実行までフォーマットを遅らせることで、ログ引数での高価な関数呼び出しを回避できます。

type LogFormatter interface {
    LogFormat() string
}

// Inside the logger
if i, ok := i.(LogFormatter); ok {
    fmt.Println(i.LogFormat())
}

もう 1 つの戦略は、ロガー インターフェイスを使用して実行時に、またはビルド制約を使用してビルド時にロガーを交換することです。ただし、これには、負荷の高い呼び出しがロギング引数に挿入されていないことを確認する必要があります。

3 番目のオプションは、Logger 自体を bool として定義し、冗長性を減らしながらロギングを制御する簡潔な方法を提供することです。

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