Ведение журнала MDC в GoLang
Ведение журнала MDC в Java основано на локальном хранилище потоков, которое недоступно в GoLang. Однако аналогичной функциональности можно добиться, пропустив контекст через стек.
Java MDC использует локальное хранилище потоков, чего нет в Go. Самый близкий вариант — пропустить контекст через ваш стек, что становится обычной практикой в библиотеках 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 }
Этот подход позволяет легко отслеживать одновременные запросы путем добавления уникальных идентификаторов во все журналы сервера. Существуют и другие возможные реализации, но эта обеспечивает простой способ ведения журнала в стиле MDC в GoLang.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3