Outras fontes de logs
Nos tópicos anteriores, os objectos incorporados nas classes S# eram fontes de logs. O S# fornece possibilidades para os casos em que a fonte dos logs é a sua própria classe, ou quando a fonte não tem de estar associada a uma classe específica mas serve toda a aplicação. No primeiro caso, tem de implementar na sua classe a interface ILogSource ou herdar de BaseLogReceiver. Na segunda situação, pode utilizar TraceSource, que usa o sistema de tracing do .NET. A forma de o fazer é mostrada no exemplo Samples/08_Misc/01_Logging.
Exemplo de logging
Crie uma classe personalizada que herde de BaseLogReceiver.
private class TestSource : BaseLogReceiver { }Crie o LogManager e declare uma variável da classe do utilizador.
private readonly LogManager _logManager = new LogManager(); private readonly TestSource _testSource;Adicione fontes de log.
_logManager.Sources.Add(_testSource = new TestSource()); _logManager.Sources.Add(new Ecng.Logging.TraceSource());Adicione listeners de log.
// as mensagens de log serão apresentadas no componente GUI _logManager.Listeners.Add(new GuiLogListener(Monitor)); // também escrever em ficheiros _logManager.Listeners.Add(new FileLogListener { FileName = "logs", });Adicione mensagens de logging da classe personalizada. O nível de logging é escolhido aleatoriamente.
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(); }Adicione mensagens de tracing.
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(); }O resultado do funcionamento do exemplo.
