OutputDebugStringAppender在Visual Studio中不起作用

Bre*_*ias 3 c# log4net mstest visual-studio

我遵循了这里给出的log4net建议.然后我通过在Visual Studio 2010中点击'F5'来启动MsTest单元测试.当单元测试执行这两行时:

log.Warn("hello");  //this is a log4net logger.
System.Diagnostics.Debug.Write("there");
Run Code Online (Sandbox Code Playgroud)

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

当我调试悬停在'log'变量上时,它显示我:

IsDebugEnabled = false
IsErrorEnabled = true
IsFatalEnabled = true
IsInfoEnabled  = false
IsWarnEnabled  = true
Run Code Online (Sandbox Code Playgroud)

由此我得出结论,正在正确读取配置文件.我的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>
Run Code Online (Sandbox Code Playgroud)

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

sgm*_*ore 6

尝试使用DebugAppender而不是OutputDebugStringAppender.

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

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

  • 啊啊啊啊!!这么近,却这么远!DebugAppender 可以工作,并且是完美的解决方案,除了它强制所有日志条目都以记录器的名称作为前缀。我希望可以在配置中的 DebugAppender 上设置一个属性来告诉它不要这样做。 (2认同)