2016-12-08 3 views
0

Как я могу достичь MDC Logging (Java) в GoLang?Golang Logging with Mapped Diagnostic Context

Мне нужно добавить UUID во всех журналах сервера, чтобы иметь возможность отслеживать параллельные запросы.

+0

Это поможет: https://joeshaw.org/revisiting-context-and-http-handler-for-go17/ –

ответ

2

Java MDC полагается на локальное хранилище потоков, что-то Go не имеет.

Ближайшая вещь - пронизить Context через ваш стек.

Это то, что все больше и больше библиотек делает в Go.

Несколько типичный способ сделать это с помощью пакета промежуточного слоя, который добавляет идентификатор запроса в контексте веб-запроса, например:

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 
} 

Там куча способов вы можете захотеть справиться с этим, но это довольно простой формой.