Wie wird das Neuladen der NLog-Konfigurationsdatei erzwungen?

Ich verwende NLog mit Konfigurationsdateien. Um zu vermeiden, dass für einige lange Behandlungen zu viele Dinge protokolliert werden, mache ich Folgendes:

 foreach (LoggingRule rule in LogManager.Configuration.LoggingRules) 
 {
      rule.DisableLoggingForLevel(LogLevel.Trace);   
      rule.DisableLoggingForLevel(LogLevel.Debug);   
 }
 LogManager.ReconfigExistingLoggers();

Ermöglicht es mir, die Detailstufe der Protokollierung vorübergehend zu verringern. Die obigen Zeilen sind nur ein Beispiel zur Veranschaulichung. Das scheint perfekt zu funktionieren.

Danach möchte ich meine "normale" Protokollierungskonfiguration einfach durch @ wiederherstelle Neuladen meiner NLog.Config-Datei welches bereits beim Programmstart automatisch geladen wurde. Ich habe es versucht

LogManager.Configuration.Reload();
LogManager.ReconfigExistingLoggers();

Ich dachte, es wäre einfach, aber die Konfiguration. Reload macht nicht das, was ich erwartet hatte, und ich habe keine andere geeignete Methode gefunden. Nach dem Aufruf speichert mein Logger immer noch keine Traces und Debug-Ereignisse, während sie beim Programmstart waren.

So lautet meine Frage: Wie kann ich das Neuladen von NLog.config zur Laufzeit programmgesteuert erzwingen und meine "Standard" -Loggereinstellungen wiederherstellen?

Vielen Dan

Frage Update mit mehr Details:

Ich verwende VS2013, .Net 4 Projet mit NLog 4.4.0-Beta11 (Beta, aber zuletzt auf Nuget), einfaches "Datei" -Ziel, das in der Konfigurationsdatei mit minLevel = Trace und autoReload = True definiert ist.

Logger wird auf Klassenebene instanziiert: private static readonly Logger Logger = LogManager.GetCurrentClassLogger ();

Hier ist mein Testbeweis:

    Assert.True(Logger.IsTraceEnabled);
    Assert.True(Logger.IsDebugEnabled);

    Logger.Trace("1 - This should appear in log");
    Logger.Debug("2 - This should appear in log");

    foreach (LoggingRule rule in LogManager.Configuration.LoggingRules)
    {
        rule.DisableLoggingForLevel(LogLevel.Trace);
        rule.DisableLoggingForLevel(LogLevel.Debug);
    }
    LogManager.ReconfigExistingLoggers();

    Logger.Trace("3 - This should NOT appear in log");
    Logger.Debug("4 - This should NOT appear in log");
    Logger.Info("5 - This should appear in log");

    Assert.False(Logger.IsDebugEnabled);
    Assert.False(Logger.IsTraceEnabled);

    LogManager.Configuration.Reload();
    LogManager.ReconfigExistingLoggers();

    // This is were something goes wrong

    Logger.Trace("6 - This should appear in log"); // DOES NOTHING
    Logger.Debug("7 - This should appear in log"); // DOES NOTHING
    Logger.Info("8 - This should appear in log");

    Assert.True(Logger.IsDebugEnabled); // FAILS
    Assert.True(Logger.IsTraceEnabled); // FAILS

Generiertes Protokoll:

    TRACE 1 - This should appear in log         
    DEBUG 2 - This should appear in log
    INFO 5 - This should appear in log
    INFO 8 - This should appear in log

Im internen Protokoll von nlog kann ich sehen, dass die Konfiguration ohne Probleme neu geladen wurde (sehr lange Datei, daher kann ich sie nur hier posten, wenn jemand danach fragt), aber möglicherweise werden die vorhandenen Protokolldateien nicht aktualisier

Mit dem obigen Code sollte es einfach sein, es auf Ihrer Seite zu versuchen. Bitte lassen Sie mich wissen, wenn ich etwas falsch mache oder wenn es ein Fehler in der NLog-Konfigurationsverwaltung ist.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage