我有一个带有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的源代码)吗?我可以以某种方式排除源自特定程序集的所有消息吗?或者可能让它们以已知字符串作为前缀,以便我可以根据单个字符串过滤消息?