ホームページ  >  記事  >  バックエンド開発  >  GoLang で MDC ログを実装するにはどうすればよいですか?

GoLang で MDC ログを実装するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-10-27 21:00:30800ブラウズ

How can you implement MDC logging in GoLang?

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 サイトの他の関連記事を参照してください。

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