Как добиться ведения журнала MDC (Java ) в GoLang?
Мне нужно добавить UUID во все журналы сервера, чтобы иметь возможность отслеживать одновременные запросы.
Как добиться ведения журнала MDC (Java ) в GoLang?
Мне нужно добавить 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
}
Есть куча способов, которыми вы можете справиться с этим, но это довольно простая форма.
type requestIdKey struct{}
req = req.WithContext(context.WithValue(req.Context(),requestIdKey{},ID))
- person dolmen; 22.10.2019