禁用特定程序集的调试消息

时间:2013-10-31 16:04:53

标签: c# logging nlog avalondock

我有一个带有NLog的C#应用​​程序用于记录,并且它还设置为记录发送到System.Diagnostics的Trace / Debug系统的消息。这在应用程序的配置文件中完成,如下所示:

<system.diagnostics>
  <trace autoflush="true" indentsize="2">
    <listeners>
      <add name="nLogListener" />
    </listeners>
  </trace>

  <sources>
    <!--bunch of extra sources here-->
  </sources>

  <sharedListeners>
    <add name="nLogListener" type="NLog.NLogTraceListener, NLog"/>
  </sharedListeners>
</system.diagnostics>

这很好用,但是自从我开始使用AvalonDock以来,日志变得混乱了调试信息。我想通过nuGet引入的程序集是在定义了DEBUG常量的情况下编译的,因此对AvalonDock源代码的Deug.WriteLine的调用最终会使它成为NLog日志。他们看起来像这样顺便说一句:

NLog.LoggerImpl.Write | Attach() 
NLog.LoggerImpl.Write | DockingManager.OnPreviewGotKeyboardFocus(System.Windows.Controls.Canvas) 
NLog.LoggerImpl.Write | SetFocusOnLastElement(focused=True, model=Xceed.Wpf.AvalonDock.Layout.LayoutAnchorable, element=System.Windows.Controls.Canvas) 
NLog.LoggerImpl.Write | DockingManager.OnPreviewLostKeyboardFocus(System.Windows.Controls.Canvas) 

我想在保留发送到跟踪的所有其他消息的同时排除它们。我可以在NLog中添加一个过滤器,使用通配符等排除所有这些过滤器,但是我不想这样做:

  • 它要求我弄清楚AvalonDock可以吐出的所有可能消息
  • 如果AvalonDock发生变化,我必须更新过滤器
  • 还存在排除非AvalonDock消息的风险

还有另一种处理方法(不重新编译AvalonDock的源代码)吗?我可以以某种方式排除源自特定程序集的所有消息吗?或者可能让它们以已知字符串作为前缀,以便我可以根据单个字符串过滤消息?

0 个答案:

没有答案