2012-03-15 7 views
7

Quiero un objetivo Nlog para dejar de escuchar en el registro. El método RemoveTarget no parece funcionar. Aquí hay una prueba fallida.¿Cómo puedo darme de baja un objetivo Nlog

public class when_stopping_to_listen 
{ 
    static Logger Logger; 
    static MemoryTarget target; 

    Establish context =() => 
    { 
     var config = new LoggingConfiguration(); 
     Logger = LogManager.GetLogger("TestLogger"); 

     target = new MemoryTarget {Layout = "${message}", Name = "TestTarget"}; 

     config.AddTarget(target.Name, target); 
     config.LoggingRules.Add(new LoggingRule("*", LogLevel.Trace, target)); 

     LogManager.Configuration = config; 
    }; 

    Because of =() => 
    { 
     var config = LogManager.Configuration; 
     config.RemoveTarget(target.Name); 
     LogManager.Configuration = config; 
     Logger.Info("Test"); 
    }; 

    It should_be_empty =() => target.Logs.ShouldBeEmpty(); 
} 

Gracias de antemano.

Respuesta

9

no sé qué RemoveTarget no funciona. Pero si se quita el objetivo de cada regla pasa la prueba:

Because of =() => 
{ 
    foreach (var rule in config.LoggingRules) 
    { 
     rule.Targets.Remove(target); 
    }   
    Logger.Info("Test"); 
}; 

Y si se quita el LoggingRule en lugar del objetivo que también funciona:

public class when_stopping_to_listen 
{ 
    //... 
    static LoggingRule rule; 

    Establish context =() => 
    { 
     //... 
     rule = new LoggingRule("*", LogLevel.Trace, target); 
     config.LoggingRules.Add(rule);  
     LogManager.Configuration = config; 
    }; 

    Because of =() => 
    { 
     var config = LogManager.Configuration; 
     config.LoggingRules.Remove(rule); 
     LogManager.Configuration = config; 
     Logger.Info("Test"); 
    };  

    //... 
} 
+0

por lo que es todo acerca de las reglas? – forki23

+3

Parece que sí ... A partir de código fuente de la Nlog parece una vez que se ha inicializado las reglas con los objetivos que no utiliza la colección 'LogManager.Configuration.ConfiguredNamedTargets' más. Es por eso que 'RemoveTarget' no está funcionando. – nemesv

Cuestiones relacionadas