Effiziente Protokollierung für deaktivierte Anweisungen in Go
In kritischen Pfaden ist es von Vorteil, Debug-/Trace-Protokollierungsanweisungen einzubetten, die dynamisch umgeschaltet werden können Laufzeit. Diese Vorgehensweise eignet sich ideal zum Debuggen offline geschalteter Produktionssysteme oder zum Testen von Systemen, die die Produktionsumgebung widerspiegeln.
Für diese Art der Protokollierung gibt es jedoch eine entscheidende Anforderung: Deaktivierte Anweisungen dürfen nur minimale Auswirkungen auf die Leistung haben. In C/C wurde dies durch ein LOG-Makro erreicht, das die Argumentauswertung unterdrückte, bis ein Flag überprüft wurde.
Implementieren der deaktivierten Protokollierung in Go
Emulieren dieses Verhaltens in Go stellt Herausforderungen dar. Die Verwendung von io.Discard mit log.Logger ist keine Option, da es Protokollnachrichten auch dann formatiert, wenn es deaktiviert ist.
Ein erster Versuch mit einer EnabledLogger-Struktur implementiert die log.Logger-Schnittstelle und aktiviert/deaktiviert die Protokollierung basierend auf „Enabled“. Flagge. Die Argumentauswertung bleibt jedoch nicht unterdrückt, was möglicherweise zu Leistungsproblemen bei beliebigen Funktionsaufrufen führt.
Zwei Problemumgehungen
Um dieses Problem zu beheben, gibt es zwei Problemumgehungen:
Beide Ansätze führen zu Ergebnissen in ausführlichem und fehleranfälligem Code, was die Tür zu potenziellen Leistungseinbußen öffnet.
Sonstiges Optionen
Trotz der statischen Bewertungsregeln von Go gibt es einige zusätzliche Optionen:
Obwohl diese Lösungen nicht ideal für die dynamische Laufzeitkonfiguration sind, können sie in bestimmten Szenarien zu Leistungsverbesserungen führen.
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