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

  1. Crie uma classe personalizada que herde de BaseLogReceiver.

    private class TestSource : BaseLogReceiver
    {
    }
    
  2. Crie o LogManager e declare uma variável da classe do utilizador.

    private readonly LogManager _logManager = new LogManager();
    private readonly TestSource _testSource;
    
    
  3. Adicione fontes de log.

    _logManager.Sources.Add(_testSource = new TestSource());
    _logManager.Sources.Add(new Ecng.Logging.TraceSource());
    
    
  4. 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",
    });
    
    
  5. 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();
    }
    
  6. 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();
    }
    
  7. O resultado do funcionamento do exemplo.sample registro