2012-03-15 17 views
7

की सदस्यता कैसे रद्द कर सकता हूं, मैं लॉग को सुनना बंद करने के लिए एक एनएलओजी लक्ष्य चाहता हूं। RemoveTarget विधि काम नहीं लग रहा है। यहां एक असफल परीक्षण है।मैं एनएलओजी लक्ष्य

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(); 
} 

अग्रिम धन्यवाद।

उत्तर

9

मुझे नहीं पता कि क्यों RemoveTarget काम नहीं करता है। लेकिन आप प्रत्येक से लक्ष्य निकालना यदि शासन परीक्षण में सफ़ल:

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

और अगर आप लक्ष्य यह भी काम करता है के बजाय LoggingRule निकालें:

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

तो यह सब नियमों के बारे में है? – forki23

+3

ऐसा लगता है ... नलॉग के स्रोत कोड से ऐसा लगता है कि यह लक्ष्य के साथ नियमों को शुरू करने के बाद यह 'LogManager.Configuration.ConfiguredNamedTargets' संग्रह का उपयोग नहीं करता है। यही कारण है कि 'RemoveTarget' काम नहीं कर रहा है। – nemesv

संबंधित मुद्दे