2012-01-25 102 views
2

我正在使用NUnit來測試項目,我想配置我的測試以編程方式設置Common.Logging以使用Log4Net。以下是我已經試過:以編程方式配置Log4NetLoggerFactoryAdapter

 NameValueCollection config = new NameValueCollection(); 
     //config.Add("configType", "EXTERNAL"); 

     var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("DevelopMENTALMadness.Data.Sql.Tests.loggerconfig.xml"); 
     XmlConfigurator.Configure(stream); 

     LogManager.Adapter = new Log4NetLoggerFactoryAdapter(config); 

具有下列文件:

<log4net> 
<appender name="A1" type="log4net.Appender.ConsoleAppender"> 

    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="[%thread] %-4timestamp %-5level %logger %ndc - %message%newline" /> 
    </layout> 
</appender> 

<!-- Set root logger level to DEBUG and its only appender to A1 --> 
<root> 
    <level value="DEBUG" /> 
    <appender-ref ref="A1" /> 
</root> 

而且

 NameValueCollection config = new NameValueCollection(); 
     //config.Add("configType", "EXTERNAL"); 

     var x = new ConsoleAppender { Layout = new PatternLayout("[%thread] %-4timestamp %-5level %logger %ndc - %message%newline") }; 
     BasicConfigurator.Configure(x); 

     LogManager.Adapter = new Log4NetLoggerFactoryAdapter(config); 

但無論它不使用我指定的圖案或如果我取消註釋「configType」行,它根本不顯示任何內容。我只是試圖選擇我想要的佈局,所以當我調試我的測試時,我可以在NUnit runner(文本輸出)中看到日誌輸出。

回答

0

這就是我最終做的 - 它符合我希望在NUnit亞軍控制檯中看到輸出的目標,另外我最終還添加了滾動文件記錄器。

在測試類:

[TestFixtureSetUp] 
public void Init() 
{ 
    BasicConfigurator.Configure(new ConsoleAppender()); 
} 

然後,我有一個App.config文件(複印件總是):

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <configSections> 
     <sectionGroup name="common"> 
      <section name="logging" type="Common.Logging.ConfigurationSectionHandler, Common.Logging" /> 
     </sectionGroup> 
     <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" /> 
    </configSections> 

    <common> 
     <logging> 
      <factoryAdapter type="Common.Logging.Log4Net.Log4NetLoggerFactoryAdapter, Common.Logging.Log4Net"> 
       <arg key="configType" value="INLINE"/> 
      </factoryAdapter> 
     </logging> 
    </common> 

    <log4net debug="false"> 
     <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender"> 
      <file value="./Tests.log" /> 
      <lockingModel type="log4net.Appender.FileAppender+MinimalLock"/> 
      <appendToFile value="true" /> 
      <rollingStyle value="Size" /> 
      <maxSizeRollBackups value="10" /> 
      <maximumFileSize value="50MB" /> 
      <staticLogFileName value="true" /> 
      <layout type="log4net.Layout.PatternLayout"> 
       <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline"/> 
      </layout> 
      <threshold value="DEBUG" /> 
     </appender> 
     <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender"> 
      <layout type="log4net.Layout.PatternLayout"> 
       <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline"/> 
      </layout> 
     </appender> 
     <root> 
      <priority value="ALL"/> 
      <appender-ref ref="RollingFileAppender"/> 
      <appender-ref ref="ConsoleAppender" /> 
     </root> 
    </log4net> 
</configuration> 
+0

所以在app.config坐在NUnit的班? – tofutim

+0

不記得 - 可能在測試項目中 –

2

剛擡起頭,Common.Logging自帶了一堆違約日誌適配器 - 其中之一是一個控制檯appender。

使用此功能可以消除在測試程序集中維護記錄器配置的需要。

配置是在您的測試夾具一個襯墊:

Common.Logging.LogManager.Adapter = new Common.Logging.Simple.ConsoleOutLoggerFactoryAdapter();