Logging MDC no GoLang
O log MDC do Java depende do armazenamento local de thread, que não está disponível no GoLang. No entanto, uma funcionalidade semelhante pode ser alcançada encadeando um Contexto através da pilha.
Java MDC depende do armazenamento local do encadeamento, algo que Go não possui. O mais próximo é encadear um contexto em sua pilha, o que está se tornando uma prática comum em bibliotecas Go.
Uma maneira de implementar isso é por meio de um pacote de middleware que adiciona um ID de solicitação ao contexto de uma solicitação da web . Esse ID pode então ser recuperado e usado em toda a pilha para fins de registro.
Aqui está um exemplo simples de um pacote de middleware:
req = req.WithContext(context.WithValue(req.Context(), "requestId", ID))
O ID da solicitação pode então ser recuperado using:
ctx.Value("requestId")
Este valor pode ser usado em uma função de logger personalizada:
func logStuff(ctx context.Context, msg string) { log.Println(ctx.Value("requestId"), msg) // call stdlib logger }
Essa abordagem permite fácil rastreamento de solicitações simultâneas adicionando IDs exclusivos a todos os logs do servidor. Existem outras implementações possíveis, mas esta fornece uma maneira direta de obter registro semelhante ao MDC no GoLang.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3