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 eines Middleware-Pakets:
req = req.WithContext(context.WithValue(req.Context(), "requestId", ID))
Die Anforderungs-ID kann dann abgerufen werden mit:
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 Anforderungen 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.
Das obige ist der detaillierte Inhalt vonWie können Sie die MDC-Protokollierung in GoLang implementieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!