Trace-Protokollierung in Go mit optimierter Leistung für angehaltene Anweisungen
In kritischen Pfaden ermöglicht das Belassen von Debug-/Trace-Protokollierungsanweisungen auf niedriger Ebene die Laufzeit Konfiguration, um sie nach Bedarf zu aktivieren. Diese Protokollierung sollte nur minimale Auswirkungen auf deaktivierte Anweisungen haben und sich idealerweise auf eine boolesche Prüfung beschränken.
In C/C werden LOG-Makros erst nach der Prüfung eines Flags ausgewertet und rufen nur dann eine Hilfsfunktion auf, wenn diese aktiviert ist. Wie kann Go dies erreichen?
Die Verwendung von io.Discard mit log.Logger ist wirkungslos, da Protokollnachrichten unabhängig von der Deaktivierung vollständig formatiert werden.
Ein Ansatz besteht darin, einen EnabledLogger mit einem Enabled-Flag zu erstellen und Delegieren Sie log.Logger, um die Protokollierung zu übernehmen. Dies befasst sich mit der Formatierung, wertet Argumente jedoch unabhängig von der Aktivierung aus.
Um die Argumentauswertung zu verzögern, sollten Sie die Verwendung von Stringify-Wrappern für komplexe Werte in Betracht ziehen. Dieser Ansatz bleibt jedoch ausführlich und fehleranfällig.
Alternativ können Sie vor der Protokollierung manuell die Aktivierung prüfen. Dies ist prägnanter, erfordert aber Disziplin, um Versäumnisse zu vermeiden.
Letztendlich schränkt Gos strenge Bewertung von Argumenten die Möglichkeiten ein. Die folgenden Muster sind zwar nicht perfekt für die Laufzeitkonfigurierbarkeit, aber machbar:
Das obige ist der detaillierte Inhalt vonWie erreicht man eine effiziente Trace-Protokollierung in Go mit optimierter Leistung für ausgesetzte Anweisungen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!