log4net和NUnit 3.2以及VS中的控制台输出

时间:2016-06-18 06:25:03

标签: visual-studio nunit log4net log4net-configuration nunit-3.0

在我的NUnit 2.6测试中,我曾经在Visual Studio的输出窗口中的Tests部分中看到log4net日志消息。由于我切换到NUnit 3.2,它们不再显示,这非常不方便。我尝试搜索,我想出的最好的“解决方案”是将所有内容转储到调试字符串中,可以通过SysInternals的DebugView实用程序查看,也可以在我实际调试测试时查看 - 然后消息显示在Debug部分中。但是,即使没有调试,我也希望在Visual Studio中看到我的日志行。有任何想法吗? Visual Studio 2015.这是我当前的log4net配置:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,Log4net"/>
  </configSections>

  <log4net>
    <appender name="OutputDebugStringAppender" type="log4net.Appender.OutputDebugStringAppender" >
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
      </layout>
    </appender>

    <appender name="DebugAppender" type="log4net.Appender.DebugAppender" >
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
      </layout>
    </appender>

    <root>
      <level value="ALL" />
      <appender-ref ref="OutputDebugStringAppender" />
      <appender-ref ref="DebugAppender" />
    </root>
  </log4net>
</configuration>

3 个答案:

答案 0 :(得分:1)

NUnit V2捕获了log4net输出并将其转换为NUnit事件。对于3.0,我们认为这超出了NUnit的范围,并将其留给log4net来显示内容。在NUnit控制台运行程序下运行时,这样可以正常工作,但在VS适配器下它有点受限制。

我认为我们提供一个appender或引擎扩展是合理的,你可以使用它来将log4net输出转换为NUnit输出事件的形式。这是一个志愿写作的人的问题。如果您认为这很重要,可以在github上提出问题。

答案 1 :(得分:0)

对于NUnit v3,您可以使用以下代码行完成此操作:

Console.SetOut(TestContext.Progress);

Log4Net配置为使用ConsoleAppender。

答案 2 :(得分:0)

对我来说,解决方案是将ConsoleAppender的目标属性设置为“ Console.Out”:

<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender, log4net">
    <target value="Console.Out"/>
    <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date{dd MMM yyyy HH:mm:ss} %level [%thread] %method - %message%n" />
    </layout>
</appender>

不需要设置为TestContext.Progress

这与NUnit 3.11和R#testrunner一起使用。
PS。注意我们使用了不同的追加器。因为它是在我的主SERP中出现的,所以无论如何我都将其留在这里。 :)