Otras fuentes de registro

En los temas anteriores, los objetos integrados en las clases de S# eran fuentes de registro. S# ofrece posibilidades para los casos en que la fuente de registro es su propia clase, o cuando la fuente no tiene que estar asociada a una clase concreta sino que sirve a toda la aplicación. Para el primer caso debe implementar en su clase la interfaz ILogSource o heredar de BaseLogReceiver. En la segunda situación, puede usar TraceSource, que usa el sistema de tracing de .NET. Cómo hacerlo se muestra en el ejemplo Samples/08_Misc/01_Logging.

Ejemplo de registro

  1. Cree una clase personalizada que herede de BaseLogReceiver.

    private class TestSource : BaseLogReceiver
    {
    }
    
  2. Cree LogManager y declare una variable de la clase de usuario.

    private readonly LogManager _logManager = new LogManager();
    private readonly TestSource _testSource;
    
    
  3. Agregue fuentes de registro.

    _logManager.Sources.Add(_testSource = new TestSource());
    _logManager.Sources.Add(new Ecng.Logging.TraceSource());
    
    
  4. Agregue receptores de registro.

    // los mensajes de registro se mostrarán en el componente GUI
    _logManager.Listeners.Add(new GuiLogListener(Monitor));
    // también se escriben en archivos
    _logManager.Listeners.Add(new FileLogListener
    {
     FileName = "logs",
    });
    
    
  5. Agregue mensajes de registro de la clase personalizada. El nivel de registro se elige aleatoriamente.

    var level = RandomGen.GetEnum<LogLevels>();
    switch (level)
    {
     case LogLevels.Inherit:
     case LogLevels.Debug:
     case LogLevels.Info:
     case LogLevels.Off:
     	_testSource.AddInfoLog("{0} (fuente)!!!".Put(level));
     	break;
     case LogLevels.Warning:
     	_testSource.AddWarningLog("Advertencia (fuente)!!!");
     	break;
     case LogLevels.Error:
     	_testSource.AddErrorLog("Error (fuente)!!!");
     	break;
     default:
     	throw new ArgumentOutOfRangeException();
    }
    
  6. Agregue mensajes de tracing.

    var level = RandomGen.GetEnum<LogLevels>();
    switch (level)
    {
     case LogLevels.Inherit:
     case LogLevels.Debug:
     case LogLevels.Info:
     case LogLevels.Off:
     	Trace.TraceInformation("{0} (traza)!!!".Put(level));
     	break;
     case LogLevels.Warning:
     	Trace.TraceWarning("Advertencia (traza)!!!");
     	break;
     case LogLevels.Error:
     	Trace.TraceError("Error (traza)!!!");
     	break;
     default:
     	throw new ArgumentOutOfRangeException();
    }
    
  7. Resultado del funcionamiento del ejemplo.Ejemplo de registro