Das ist nicht wirklich eine andere Antwort als @Nobby, weil er Recht hat, wie zu den Ebenen. Ich werde sagen, dass Sie die IfXXXXEnabled-Prüfung vor der Protokollierung nicht durchführen müssen.
Dies ist, was Sie in Ihrem C# -Code in Ihrer Frage für die Protokollierung Aufrufort haben:
if (logger.IsDebugEnabled) logger.Debug(logMessage) else if (logger.IsInfoEnabled)log.Info(logMessage);
@Nobby schlägt vor, dies gemacht werden könnte sauberer durch dies zu tun:
if (logger.IsDebugEnabled) logger.Debug(logMessage);
if (logger.IsInfoEnabled) logger.Info(logMessage);
Ich glaube nicht, dass das wirklich stimmt. Mit Ihrem ursprünglichen Code wird NUR die Debug-Nachricht ODER die Info-Nachricht protokolliert. Wenn Sie die Verschachtelung entfernen, können Sie abhängig von der aktivierten Protokollierungsebene BEIDE Nachrichten protokollieren.
Ich glaube, Sie sollten diese Art und Weise werden Anmeldung:
logger.Debug(logMessage);
logger.Info(logMessage);
Die Logging-Methoden (logger.debug, logger.Info, etc.) bereits tun, um eine IsXXXEnabled Prüfung und wird nicht anmelden, wenn die Protokollierungsstufe nicht ist aktiviert. Sie können ein Protokoll der Eingabe (und der Verwirrung) speichern, indem Sie den Protokollierungsaufruf direkt durchführen, anstatt ihn mit der Prüfung if
zu schützen.
Es gibt Zeiten, wenn Sie die IsXXXEnabled-Prüfung verwenden möchten. Wie wenn Sie einige Arbeit zu tun haben, den Wert (e) angemeldet sein, zu berechnen und Sie wollen nur, dass die Berechnung tun, wenn Sie sich anmelden:
if (logger.IsDebugEnabled)
{
int value1 = DoSomeExpensiveCalculation();
int value2 = DoSomeOtherExpensiveCalculation();
logger.DebugFormat("v1 = {0}, v2 = {1}", value1, value2);
}
diese Weise können Sie nicht den Preis der Berechnungen zahlen, es sei denn Sie werden sie tatsächlich protokollieren.
schließlich in NLog 2.0 haben Sie Zugriff auf Lambda-Syntax, die Sie würde es ermöglichen potenziell teure Operationen zu verschieben, wenn die Nachricht tatsächlich protokolliert:
logger.Debug(() => string.Format("v1 = {0}, v2 = {1}", DoSomeExpensiveCalculation(), DoSomeOtherExpensiveCalculation()));
logger.Debug(() => "message" + i + ", " + j + "," + k);
In beiden Fällen den Ausdruck, der NLog geben wird wird nur ausgewertet, wenn die DEBUG-Ebene aktiviert ist.