3

在我的 NUnit 2.6 测试中,我曾经在 Visual Studio 的输出窗口的测试部分中看到 log4net 日志消息。由于我切换到 NUnit 3.2,它们不再显示,这非常不方便。我尝试搜索,我想出的最佳“解决方案”是将所有内容转储到调试字符串中,可以通过 SysInternals 的 DebugView 实用程序查看,也可以在我实际调试测试时查看 - 然后消息显示在调试部分。但是,即使没有调试,我也很想在 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>
4

3 回答 3

3

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

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

于 2016-06-18T16:19:00.007 回答
1

对于 NUnit v3,您可以使用以下代码行:

Console.SetOut(TestContext.Progress);

Log4Net 配置为使用 ConsoleAppender。

于 2016-11-29T15:16:23.933 回答
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 中。:)

于 2020-02-10T14:40:22.350 回答