Ich bin in C# -Protokollierung und ich möchte nicht meine Log-Nachrichten verbringen jede Zeit Verarbeitung, wenn die Nachricht unterhalb der Logging-Schwelle ist. Das Beste, was ich log4net sehen kann, ist eine Schwellwertüberprüfung NACH Auswertung der Log-Parameter.Leistungstricks für C# Logging
Beispiel:
_logger.Debug("My complicated log message " + thisFunctionTakesALongTime() + " will take a long time")
Auch wenn der Schwellenwert über Debug ist, wird thisFunctionTakesALongTime noch ausgewertet werden.
In log4net Sie sollen _logger.isDebugEnabled verwenden, so dass Sie mit
if(_logger.isDebugEnabled)
_logger.Debug("Much faster")
am Ende möchte ich wissen, ob eine bessere Lösung für .net Protokollierung gibt es nicht einen Scheck jedes Mal, wenn ich will mit sich bringt aufzeichnen.
In C++ Ich bin
LOG_DEBUG("My complicated log message " + thisFunctionTakesALongTime() + " will take no time")
da mein LOG_DEBUG Makro wird die Protokollebene überprüft selbst zu tun erlaubt. Das gibt mir die Möglichkeit, eine 1-Zeilen-Log-Nachricht in meiner App zu haben, die ich sehr bevorzuge. Kennt jemand eine Möglichkeit, dieses Verhalten in C# zu replizieren?
Aber wenn ich Funktionen evaluiere, um die Protokollnachricht zu erhalten, würde das nicht genauso langsam sein? Ich möchte alle Funktionsauswertungen vermeiden, wenn der Loglevel unterhalb meiner Schwelle liegt. – Charles
Sie haben Recht, dass Sie die Funktionsbewertung verzögern müssen.Sehen Sie sich mein Update an, das einen anonymen Delegaten verwendet. –
D'oh, das war meine Antwort auch. Ich sollte Sie warnen: Wenn Sie nach Geschwindigkeit suchen, möchten Sie keine Delegierten verwenden. Sie sollten einfach den Treffer nehmen und wenn if (logger.isDebugEnabled) um etwas teures verwenden. Es gibt keine Lösung, die sowohl performant als auch elegant ist. – bobbymcr