2012-03-15 18 views
7

Tôi muốn mục tiêu NLog ngừng ghi nhật ký. Phương thức RemoveTarget dường như không hoạt động. Đây là một thử nghiệm thất bại.Làm cách nào tôi có thể hủy đăng ký mục tiêu 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(); 
} 

Xin cảm ơn trước.

Trả lời

9

Tôi không biết tại sao RemoveTarget không hoạt động. Nhưng nếu bạn loại bỏ các mục tiêu từ mỗi cai trị thử nghiệm qua:

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

Và nếu bạn loại bỏ các LoggingRule thay vì mục tiêu nó cũng hoạt động:

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

Vì vậy, nó là tất cả về các quy tắc? – forki23

+3

Có vẻ như vậy ... Từ mã nguồn của Nlog có vẻ như một khi nó đã khởi tạo các quy tắc với các mục tiêu, nó không sử dụng bộ sưu tập 'LogManager.Configuration.ConfiguredNamedTargets' nữa. Đó là lý do tại sao 'RemoveTarget' không hoạt động. – nemesv

Các vấn đề liên quan