GoLang での MDC ログ
Java の MDC ログは、GoLang では使用できないスレッド ローカル ストレージに依存しています。ただし、同様の機能は、スタックを介してコンテキストをスレッド化することによって実現できます。
Java MDC は、Go にはないスレッド ローカル ストレージに依存します。最も近い方法は、スタックを介してコンテキストをスレッド化することです。これは、Go ライブラリでは一般的な手法になりつつあります。
これを実装する 1 つの方法は、Web リクエストのコンテキストにリクエスト ID を追加するミドルウェア パッケージを使用することです。 。この ID は取得され、ログ記録のためにスタック全体で使用できます。
ミドルウェア パッケージの簡単な例を次に示します。
req = req.WithContext(context.WithValue(req.Context(), "requestId", ID))
リクエスト ID は、次のコマンドを使用して取得できます。
ctx.Value("requestId")
この値はカスタム ロガー関数で使用できます:
func logStuff(ctx context.Context, msg string) { log.Println(ctx.Value("requestId"), msg) // call stdlib logger }
このアプローチでは、すべてのサーバー ログに一意の ID を追加することで、同時リクエストを簡単にトレースできます。他にも実装可能なものはありますが、これは GoLang で MDC のようなロギングを実現する簡単な方法を提供します。
以上がGoLang で MDC ログを実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。