3

我已遵循此处给出的 log4net 建议。然后我通过在 Visual Studio 2010 中按“F5”来启动 MsTest 单元测试。当单元测试执行这两行时:

log.Warn("hello");  //this is a log4net logger.
System.Diagnostics.Debug.Write("there");

...Visual Studio 输出窗口仅显示“那里”一词。为什么“你好”不输出?

当我调试悬停在“日志”变量上时,它向我显示:

IsDebugEnabled = false
IsErrorEnabled = true
IsFatalEnabled = true
IsInfoEnabled  = false
IsWarnEnabled  = true

由此我得出结论,配置文件被正确读取。我的 log4net 配置如下所示:

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

  <!-- A1 uses PatternLayout -->
  <layout type="log4net.Layout.PatternLayout">
    <!--<conversionPattern value="%-4r [%t] %-5p %c %x - %m%n" />-->
    <conversionPattern value="[MySite] %level %date{HH:mm:ss,fff} - %message%n" />        
  </layout>
 </appender>

 <root>
  <level value="WARN" />
  <appender-ref ref="A1" />
 </root>
</log4net>

当我添加一个额外的 FileAppender 时,它创建的文件确实包含“hello”消息。为什么VS调试输出窗口没有显示“你好”的任何线索?

4

1 回答 1

9

尝试使用DebugAppender而不是 OutputDebugStringAppender。

DebugAppender最终将作为调用,System.Diagnostics.Debug.Write而 OutputDebugStringAppender 正在调用非托管代码,Visual Studio 不会捕获它(至少默认情况下不会捕获它,即使在调试时也是如此,这意味着它不适用于您的情况)。

DebugAppender 的输出也可以使用链接文章中提到的 DebugView 捕获,所以我想不出他使用 OutputDebugStringAppender 的任何原因。

于 2013-09-06T19:00:52.707 回答