log4net e nunit test, l'esempio più elementare

log4net e nunit test, l'esempio più elementare

Il problema è che il test runner NUnit (quando eseguito da resharper in Visual Studio) esegue il test da un'altra cartella (copia shadow dell'assembly di test), quindi la configurazione xml non è disponibile a quel punto a meno che non specifichi il percorso di configurazione completo.

Ovviamente potresti usare la configurazione di base e specificare la configurazione di registrazione nel codice, come:

log4net.Config.BasicConfigurator.Configure(
  new log4net.Appender.ConsoleAppender {
    Layout = new log4net.Layout.SimpleLayout()});

Dopo dovresti vedere l'output del registro nell'output del test.


Finché conosco e ho usato log4net con nunit, non ho mai usato alcun file di configurazione , devi solo aggiungere la seguente riga nel costruttore della classe di test

BasicConfigurator.Configure();

ecco la risposta completa se ti piace vedere la classe di prova di esempio


La mia ipotesi migliore sarebbe che tu facessi qualcosa del genere:

[TestFixture]
class DomainTests
{
    protected static readonly ILog log = LogManager.GetLogger(typeof(DomainTests));
    public void LoggingTests()
    {            
        log4net.Config.XmlConfigurator.Configure(); 
    }

    [Test]
    public void BasicLogTest()
    {
        log.Error("write my log entry already");
    }

    [SetUp]
    RunBeforeAnyTests()
    {
        BasicConfigurator.Configure();
    }

    [TearDown]
    RunAfterAnyTests()
    {
        // ...
    }

Userei anche il file Log4Net.config anziché il file app.config, sembra semplicemente più pulito. Ecco un esempio di file log4net.config:

<log4net>
  <!-- A1 is set to be a LogFileAppender -->
  <appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender, log4net" >
    <param name="File" value="C:\logging\log.txt" />
    <file value="c:\logging\Main" />
    <appendToFile value="true" />
    <datePattern value="yyyyMMdd'.log'" />
    <rollingStyle value="Composite" />
    <staticLogFileName value="false" />
    <maxSizeRollBackups value="-1" />
    <maximumFileSize value="500MB" />

    <!-- A1 uses PatternLayout -->
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
    </layout>
  </appender>
  <!-- Set root logger level to DEBUG and its only appender to LogFileAppender -->
  <root>
    <!--<level value="OFF" />-->
    <!--<level value="FATAL" />-->
    <!--<level value="ERROR" />-->
    <!--<level value="WARN" />-->
    <!--<level value="INFO" />-->
    <level value="DEBUG" />
    <!--<level value="ALL" />-->
    <appender-ref ref="LogFileAppender" />
  </root>
</log4net>