Einen Protokollierungsmechanismus ähnlich MDC (Mapped Diagnostic Context) in Java zu erreichen, ist in Golang nicht einfach. Das Fehlen von lokalem Thread-Speicher in Go stellt ein erhebliches Hindernis dar.
Um diese Einschränkung zu umgehen, besteht der empfohlene Ansatz darin, einen Kontext durch den Anforderungsstapel zu leiten. Dies kommt in Golang-Bibliotheken immer häufiger vor.
Eine typische Implementierung umfasst die Verwendung einer Middleware, um dem Kontext eine eindeutige Anforderungs-ID hinzuzufügen. Hier ist ein Beispiel:
req = req.WithContext(context.WithValue(req.Context(), "requestId", ID))
Diese Anforderungs-ID kann dann abgerufen und im gesamten Code verwendet werden, indem auf ctx.Value("requestId") zugegriffen wird.
Um den Protokollierungsprozess anzupassen, wird ein dedizierter Es kann eine Logger-Funktion erstellt werden:
func logStuff(ctx context.Context, msg string) { log.Println(ctx.Value("requestId"), msg) // log using the stdlib logger }
Durch die Integration verschiedener Methoden können Golang-Entwickler einen Protokollierungsmechanismus implementieren, der ähnliche Funktionen wie MDC in Java bietet und eine effiziente Verfolgung gleichzeitiger Anforderungen durch benutzerdefinierte Protokolle ermöglicht.
Das obige ist der detaillierte Inhalt vonWie erreicht man eine MDC-ähnliche Protokollierung in Golang ohne lokalen Thread-Speicher?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!