MDC-Protokollierung in GoLang
Die MDC-Protokollierung von Java basiert auf lokalem Thread-Speicher, der in GoLang nicht verfügbar ist. Eine ähnliche Funktionalität kann jedoch erreicht werden, indem ein Kontext durch den Stapel geleitet wird.
Java MDC basiert auf lokalem Thread-Speicher, etwas, das Go nicht hat. Am nächsten kommt es Ihnen, einen Kontext durch Ihren Stapel zu fädeln, was in Go-Bibliotheken mittlerweile gängige Praxis ist.
Eine Möglichkeit, dies zu implementieren, ist ein Middleware-Paket, das dem Kontext einer Webanforderung eine Anforderungs-ID hinzufügt . Diese ID kann dann abgerufen und im gesamten Stapel zu Protokollierungszwecken verwendet werden.
Hier ist ein einfaches Beispiel für ein Middleware-Paket:
req = req.WithContext(context.WithValue(req.Context(), "requestId", ID))
Die Anfrage-ID kann dann abgerufen werden using:
ctx.Value("requestId")
Dieser Wert kann in einer benutzerdefinierten Logger-Funktion verwendet werden:
func logStuff(ctx context.Context, msg string) { log.Println(ctx.Value("requestId"), msg) // call stdlib logger }
Dieser Ansatz ermöglicht eine einfache Nachverfolgung gleichzeitiger Anfragen durch das Hinzufügen eindeutiger IDs zu allen Serverprotokollen. Es gibt andere mögliche Implementierungen, aber diese bietet eine einfache Möglichkeit, eine MDC-ähnliche Protokollierung in GoLang zu erreichen.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3