Andere Protokollquellen

In den vorherigen Themen waren in die Klassen von S# eingebettete Objekte die Protokollquellen. S# bietet Möglichkeiten für Fälle, in denen die Protokollquelle Ihre eigene Klasse ist oder die Quelle nicht an eine bestimmte Klasse gebunden sein muss, sondern der gesamten Anwendung dient. Im ersten Fall müssen Sie in Ihrer Klasse das Interface ILogSource implementieren oder von BaseLogReceiver erben. Im zweiten Fall können Sie TraceSource verwenden, das das .NET-Tracing-System nutzt. Wie das funktioniert, zeigt das Beispiel Samples/08_Misc/01_Logging.

Protokollierungsbeispiel

  1. Erstellen Sie eine benutzerdefinierte Klasse, die von BaseLogReceiver erbt.

    private class TestSource : BaseLogReceiver
    {
    }
    
  2. Erstellen Sie den LogManager und deklarieren Sie eine Variable der Benutzerklasse.

    private readonly LogManager _logManager = new LogManager();
    private readonly TestSource _testSource;
    
    
  3. Fügen Sie Protokollquellen hinzu.

    _logManager.Sources.Add(_testSource = new TestSource());
    _logManager.Sources.Add(new Ecng.Logging.TraceSource());
    
    
  4. Fügen Sie Protokollempfänger hinzu.

    // Lognachrichten werden in der GUI-Komponente angezeigt
    _logManager.Listeners.Add(new GuiLogListener(Monitor));
    // zusätzliches Schreiben in Dateien
    _logManager.Listeners.Add(new FileLogListener
    {
     FileName = "logs",
    });
    
    
  5. Fügen Sie Protokollierungsnachrichten der benutzerdefinierten Klasse hinzu. Die Protokollierungsstufe wird zufällig ausgewählt.

    var level = RandomGen.GetEnum<LogLevels>();
    switch (level)
    {
     case LogLevels.Inherit:
     case LogLevels.Debug:
     case LogLevels.Info:
     case LogLevels.Off:
     	_testSource.AddInfoLog("{0} (Quelle)!!!".Put(level));
     	break;
     case LogLevels.Warning:
     	_testSource.AddWarningLog("Warnung (Quelle)!!!");
     	break;
     case LogLevels.Error:
     	_testSource.AddErrorLog("Fehler (Quelle)!!!");
     	break;
     default:
     	throw new ArgumentOutOfRangeException();
    }
    
  6. Fügen Sie Tracing-Nachrichten hinzu.

    var level = RandomGen.GetEnum<LogLevels>();
    switch (level)
    {
     case LogLevels.Inherit:
     case LogLevels.Debug:
     case LogLevels.Info:
     case LogLevels.Off:
     	Trace.TraceInformation("{0} (Ablaufverfolgung)!!!".Put(level));
     	break;
     case LogLevels.Warning:
     	Trace.TraceWarning("Warnung (Ablaufverfolgung)!!!");
     	break;
     case LogLevels.Error:
     	Trace.TraceError("Fehler (Ablaufverfolgung)!!!");
     	break;
     default:
     	throw new ArgumentOutOfRangeException();
    }
    
  7. Ergebnis der Beispielausführung.Beispiel Protokollierung