Andere Logquellen
In den vorherigen Themen waren in die Klassen von S# eingebettete Objekte die Logquellen. S# bietet Möglichkeiten für Fälle, in denen die Logquelle 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.
Logging-Beispiel
Erstellen Sie eine benutzerdefinierte Klasse, die von BaseLogReceiver erbt.
private class TestSource : BaseLogReceiver { }Erstellen Sie den LogManager und deklarieren Sie eine Variable der Benutzerklasse.
private readonly LogManager _logManager = new LogManager(); private readonly TestSource _testSource;Fügen Sie Logquellen hinzu.
_logManager.Sources.Add(_testSource = new TestSource()); _logManager.Sources.Add(new Ecng.Logging.TraceSource());Fügen Sie Loglistener 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", });Fügen Sie Logging-Nachrichten der benutzerdefinierten Klasse hinzu. Die Logging-Stufe 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} (source)!!!".Put(level)); break; case LogLevels.Warning: _testSource.AddWarningLog("Warning (source)!!!"); break; case LogLevels.Error: _testSource.AddErrorLog("Error (source)!!!"); break; default: throw new ArgumentOutOfRangeException(); }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} (trace)!!!".Put(level)); break; case LogLevels.Warning: Trace.TraceWarning("Warning (trace)!!!"); break; case LogLevels.Error: Trace.TraceError("Error (trace)!!!"); break; default: throw new ArgumentOutOfRangeException(); }Ergebnis der Beispielausführung.
