Kostengünstige Trace-Protokollierung in Go: Deaktivieren von Protokollanweisungen ohne Leistungsaufwand
Die Möglichkeit, Debugging-Protokollanweisungen ohne Auswirkungen zu kritischen Pfaden hinzuzufügen Die Produktionsleistung ist entscheidend. In Go können die Kosten für die Auswertung von Argumenten für deaktivierte Anweisungen jedoch erheblich sein.
Der maßgeschneiderte Logger
Um dieses Problem zu beheben, kann ein EnabledLogger erstellt werden, der den implementiert log.Logger-Schnittstelle und Delegieren der Ausgabe an einen log.Logger nur, wenn diese aktiviert ist. Dadurch werden die Formatierungs- und Protokollierungsvorgänge effektiv ausgeblendet, wenn sie deaktiviert sind.
Die Einschränkungen von EnabledLogger
Während der EnabledLogger die Auswertungskosten für einfache Datentypen minimiert, verarbeitet er keine beliebigen Datentypen Funktionsaufrufe oder komplexe Ausdrücke innerhalb von Protokollanweisungen. Um dies zu mildern, stehen zwei Optionen zur Verfügung:
Wrapper-Typen:
Wrapper-Typen wie Stringify können Funktionsaufrufe nur dann zurückstellen, wenn sie aktiviert sind. Obwohl ausführlich, stellt dieser Ansatz sicher, dass die Formatierung bis zur Ausführung verzögert wird.
Manuelle Prüfungen:
Explizite Prüfungen können auch verwendet werden, um die Formatierung bedingt durchzuführen, dies ist jedoch der Fall fehleranfällig und erfordert sorgfältige Aufmerksamkeit, um Konsistenz sicherzustellen.
Alternative Lösungen
Zusätzlich zu diesen Optionen umfassen andere Ansätze:
Formatierungsschnittstellen:
fmt.Stringer und fmt.GoStringer können genutzt werden, um die Formatierung für Typen aufzuschieben, die diese Schnittstellen implementieren.
Benutzerdefinierte Logger:
Das Überschreiben des Standard-Loggers durch einen benutzerdefinierten Logger zur Laufzeit ermöglicht eine genauere Kontrolle über die Datenauswertung.
Logger als Boolescher Wert:
Eine einfache, aber effektive Technik besteht darin, einen Bool-Wert als Logger selbst zu verwenden, wodurch der Code vereinfacht wird, indem die Notwendigkeit von if-Anweisungen entfällt.
Codegenerierung:
Vorverarbeitungsmakros können in Go emuliert werden Mithilfe der Codegenerierung werden Debug-Builds generiert, die nur die erforderlichen Ablaufverfolgungsanweisungen enthalten.
Das obige ist der detaillierte Inhalt vonWie erreicht man eine effiziente, kostengünstige Trace-Protokollierung ohne Leistungsaufwand?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!