Go での低コスト トレース ロギング: パフォーマンス オーバーヘッドを発生させずにログ ステートメントを無効にする
影響を与えずにデバッグ ログ ステートメントをクリティカル パスに追加する機能生産パフォーマンスは非常に重要です。ただし、Go では、無効なステートメントの引数を評価するコストが膨大になる可能性があります。
調整されたロガー
これに対処するために、EnabledLogger を作成して、 log.Logger インターフェイスと、有効な場合のみ出力を log.Logger に委任します。これにより、無効な場合に書式設定とログ操作が効果的に非表示になります。
EnabledLogger の制限
EnabledLogger は単純なデータ型の評価コストを最小限に抑えますが、任意のデータ型は処理しません。ログ ステートメント内の関数呼び出しまたは複雑な式。これを軽減するために、2 つのオプションが利用可能です:
ラッパー タイプ:
Stringify のようなラッパー タイプは、有効な場合にのみ関数呼び出しの評価を延期できます。冗長ではありますが、この方法では、フォーマットが実行されるまで遅延します。
手動チェック:
明示的なチェックを使用して条件付きでフォーマットを実行することもできますが、これはエラーが発生しやすく、一貫性を確保するには細心の注意が必要です。
代替ソリューション
これらのオプションに加えて、次のようなアプローチもあります。
フォーマッタ インターフェイス:
fmt.Stringer および fmt.GoStringer を利用して、これらのインターフェイスを実装する型のフォーマットを延期できます。
カスタム ロガー:
実行時にデフォルトのロガーをカスタム ロガーでオーバーライドすると、データ評価をより細かく制御できます。
ブール値としてのロガー:
シンプルかつ効果的な手法ロガー自体として bool 値を使用し、if ステートメントの必要性を排除してコードを簡素化します。
コード生成:
前処理マクロは Go でエミュレートできます。コード生成を使用して、必要なトレース ステートメントのみを含むデバッグ ビルドを生成します。
以上がパフォーマンスのオーバーヘッドを発生させずに、Go で効率的で低コストのトレース ロギングを実現するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。