ホームページ  >  記事  >  バックエンド開発  >  Go で無効なトレース ロギング ステートメントのコストを最小限に抑えるにはどうすればよいですか?

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

Susan Sarandon
Susan Sarandonオリジナル
2024-11-03 19:02:031027ブラウズ

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 を使用するか、テキスト/テン​​プレートを使用してファイルをビルドすることにより、特定のデバッグ シナリオに対して個別のデバッグ ビルドを作成できます。

以上がGo で無効なトレース ロギング ステートメントのコストを最小限に抑えるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。