Outras fontes de registo
Nos tópicos anteriores, os objetos incorporados nas classes S# eram fontes de registo. O S# fornece possibilidades para os casos em que a fonte de registo é 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 registo
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 registo.
_logManager.Sources.Add(_testSource = new TestSource()); _logManager.Sources.Add(new Ecng.Logging.TraceSource());Adicione ouvintes de registo.
// as mensagens de registo 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 registo da classe personalizada. O nível de registo é escolhido aleatoriamente.
var level = RandomGen.GetEnum<LogLevels>(); switch (level) { case LogLevels.Inherit: case LogLevels.Debug: case LogLevels.Info: case LogLevels.Off: _testSource.AddInfoLog("{0} (fonte)!!!".Put(level)); break; case LogLevels.Warning: _testSource.AddWarningLog("Aviso (fonte)!!!"); break; case LogLevels.Error: _testSource.AddErrorLog("Erro (fonte)!!!"); 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} (rastreio)!!!".Put(level)); break; case LogLevels.Warning: Trace.TraceWarning("Aviso (rastreio)!!!"); break; case LogLevels.Error: Trace.TraceError("Erro (rastreio)!!!"); break; default: throw new ArgumentOutOfRangeException(); }O resultado do funcionamento do exemplo.
