Как я могу достичь MDC Logging (Java) в GoLang?Golang Logging with Mapped Diagnostic Context
Мне нужно добавить UUID во всех журналах сервера, чтобы иметь возможность отслеживать параллельные запросы.
Как я могу достичь MDC Logging (Java) в GoLang?Golang Logging with Mapped Diagnostic Context
Мне нужно добавить UUID во всех журналах сервера, чтобы иметь возможность отслеживать параллельные запросы.
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
}
Там куча способов вы можете захотеть справиться с этим, но это довольно простой формой.
Это поможет: https://joeshaw.org/revisiting-context-and-http-handler-for-go17/ –