2009-11-18 46 views
3

我以前使用过log4net,但是我的当前雇主使用企业库应用程序块。我以前开发的单元测试如下我的核心日志类,想知道是否有人知道等值以下OneTimeSetup代码记录应用程序块(抱歉长码后):企业库日志块的编程配置

public abstract class DataGathererBase 
{ 
    public readonly log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); 
    public void CollectData() 
    { 
    this.LogDebug("Initialize started"); 
    } 

    public static class Logger 
    { 
    private static LoggingSettings settings = LoggingSettings.GetLoggingSettings(new SystemConfigurationSource()); 

    static Logger() 
    { 
     log4net.Config.XmlConfigurator.Configure(); 
    } 

    public static void LogDebug(this DataGathererBase current, string message) 
    { 
     if (current.logger.IsDebugEnabled) 
     { 
     current.logger.Debug(string.Format("{0} logged: {1}", current.GetType().Name, message)); 
     } 
    } 
    } 

[TestFixture] 
public class LoggerTests:DataGathererBase 
{ 
    private ListAppender appender; 
    private static ILog log; 

    [TestFixtureSetUp] 
    public void OneTimeSetup() 
    { 
    appender = new ListAppender(); 
    appender.Layout = new log4net.Layout.SimpleLayout(); 
    appender.Threshold = log4net.Core.Level.Fatal; 
    log4net.Config.BasicConfigurator.Configure(appender); 
    log = LogManager.GetLogger(typeof(ListAppender)); 
    } 

    [Test] 
    public void TestLogging() 
    { 
    this.LogDebug("Debug"); 
    Assert.AreEqual(0, ListAppender.logTable.Count()); 
    } 
} 

回答

1

给予信贷,这个答案是基于David Hayden article,它基于Alois Kraus article, Programatic Configuraton - Enterprise Library (v2.0) Logging Block。请阅读这两篇文章,详细了解对Enterprise Library日志的编程访问。

我不熟悉ListAppender所以我创建的那支在列表中的日志消息CustomTraceListener <字符串>:

public class ListAppender : Microsoft.Practices.EnterpriseLibrary.Logging.TraceListeners.CustomTraceListener 
    { 
    private List<string> list = new List<string>(); 

    public override void Write(string message) 
    { 
    } 

    public override void WriteLine(string message) 
    { 
     list.Add(message); 
    } 

    public List<string> LogTable 
    { 
     get 
     { 
     return list; 
     } 
    } 
    } 


这里是一个修改LoggerTests类编程访问EL日志类设置测试(这并不使用NUnit):

public class LoggerTests 
    { 
    private ListAppender appender; 
    private static LogWriter log; 

    public void OneTimeSetup() 
    { 
     appender = new ListAppender(); 

     // Log all source levels 
     LogSource mainLogSource = new LogSource("MainLogSource", SourceLevels.All); 
     mainLogSource.Listeners.Add(appender); 

     // All messages with a category of "Error" should be distributed 
     // to all TraceListeners in mainLogSource. 
     IDictionary<string, LogSource> traceSources = new Dictionary<string, LogSource>(); 
     traceSources.Add("Error", mainLogSource); 

     LogSource nonExistentLogSource = null;  
     log = new LogWriter(new ILogFilter[0], traceSources, nonExistentLogSource, 
         nonExistentLogSource, mainLogSource, "Error", false, false); 
    } 

    public void TestLogging() 
    { 
     LogEntry le = new LogEntry() { Message = "Test", Severity = TraceEventType.Information }; 
     le.Categories.Add("Debug"); 
     log.Write(le); 

     // we are not setup to log debug messages 
     System.Diagnostics.Debug.Assert(appender.LogTable.Count == 0); 

     le.Categories.Add("Error"); 
     log.Write(le); 

     // we should have logged an error 
     System.Diagnostics.Debug.Assert(appender.LogTable.Count == 1); 
    } 
    } 
8

企业库5.0引入一个fluent interface可以b e用于以编程方式配置应用程序块。你可能会发现这是一个更舒适的选择。

相关问题