2016-12-08 11 views

答えて

2

Java MDCはスレッドローカルストレージに依存しますが、Goにはないものがあります。

最も近いのは、スタックにContextをスレッドすることです。

これは、Goで何をしているのかがますます増えています。

やや典型的な方法は次のように、Web要求のコンテキストにリクエストIDを追加するミドルウェアパッケージを経由してこれを行うことです:あなたはそれを引く、あなたの周りのコンテキストを渡すと仮定すると、次に

req = req.WithContext(context.WithValue(req.Context(),"requestId",ID)) 

ctx.Value("requestId")で取り出して、それが意味を成すどこででも使用してください。

は、おそらくのように、独自のカスタムロガー機能を作る:

func logStuff(ctx context.Context, msg string) { 
    log.Println(ctx.Value("requestId"),msg) // call stdlib logger 
} 

あなたがこれを処理することができます方法の束がありますが、それはかなり単純なフォームです。

関連する問題