Go での無効なステートメントの効率的なロギング
クリティカル パスでは、動的に切り替えることができるデバッグ/トレース ロギング ステートメントを埋め込むと有益です。ランタイム。この方法は、オフラインにした実稼働システムのデバッグや、実稼働環境をミラーリングするテスト システムのデバッグに最適です。
ただし、このタイプのログ記録には重要な要件があります。それは、無効なステートメントがパフォーマンスに与える影響を最小限にする必要があります。 C/C では、これは、フラグがチェックされるまで引数の評価を抑制する LOG マクロによって実現されました。
Go での無効なロギングの実装
Go でのこの動作のエミュレーション課題を提示します。 log.Logger で io.Discard を使用することは、無効な場合でもログ メッセージをフォーマットするため、オプションではありません。
EnabledLogger 構造体を使用した最初の試行では、log.Logger インターフェイスが実装され、Enabled に基づいてロギングが有効/無効になります。フラグ。ただし、引数の評価は抑制されないため、任意の関数呼び出しでパフォーマンスの問題が発生する可能性があります。
2 つの回避策
これに対処するには、次の 2 つの回避策があります。
どちらの方法でも、冗長でエラーが発生しやすいコードが生成され、パフォーマンス低下の可能性が生じます。
その他のオプション
Go の静的評価ルールにもかかわらず、いくつかの追加オプションがあります:
これらのソリューションは動的なランタイム構成には理想的ではありませんが、特定のシナリオでパフォーマンスを向上させることができます。
以上がGo で無効になったステートメントの効率的なロギングを実現するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。