Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio log4net和NUnit 3.2以及VS中的控制台输出_Visual Studio_Nunit_Log4net_Log4net Configuration_Nunit 3.0 - Fatal编程技术网

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

Visual studio log4net和NUnit 3.2以及VS中的控制台输出,visual-studio,nunit,log4net,log4net-configuration,nunit-3.0,Visual Studio,Nunit,Log4net,Log4net Configuration,Nunit 3.0,在我的NUnit 2.6测试中,我曾经在VisualStudio的输出窗口的测试部分中看到log4net日志消息。由于我切换到NUnit 3.2,它们不再显示,这非常不方便。我尝试过搜索,我想到的最佳“解决方案”是将所有内容转储到调试字符串中,可以通过SysInternals中的DebugView实用程序查看这些字符串,也可以在我实际调试测试时查看这些字符串,然后在调试部分中显示这些消息。然而,我真的很想在VisualStudio中看到我的日志行,即使没有调试。有什么想法吗?Visual Stu

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

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


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

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

Console.SetOut(TestContext.Progress);

Log4Net配置为使用ConsolePender。

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


不需要设置为
TestContext.Progress

这是NUnit 3.11和R#testrunner的一部分。

注意,我们使用了不同的附加器。无论如何,我会把这个留在这里,因为它是在我的主SERP中出现的。:)

谢谢,我们在github中提出了这个问题。我认为这是相当重要的,因为我看到很多人在抱怨…谢谢你的问题。。。投诉者中没有一人被录取。:-)
<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>