说明:
我正在开发两个Windows服务(A)& (B)。在服务(A)上,我在 app.config 文件中启用了WCF跟踪,如下所示:
<system.diagnostics>
<sources>
<source name="System.ServiceModel" switchValue="Warning"
propagateActivity="true">
<listeners>
<add name="traceListener"
type="System.Diagnostics.XmlWriterTraceListener"
initializeData="C:\WCF-log.txt" />
</listeners>
</source>
</sources>
</system.diagnostics>
在这项服务(A)上,我有一些代码用于检测其他服务(B)是否已关闭,如下所示:
try {
serviceB.Ping(); // Exception is thrown here when serviceB is down, and
// logged in the C:\WCF-log.txt file
} catch {
// Manage failed ping (log...)
}
现在,服务(B)有时可能会关闭,这是正常的。我希望那些引发异常的内容不会记录在WCF跟踪中,因为它们已被我的应用程序处理,我想要只查看 C:\ WCF-log.txt 文件如果存在“真实”问题。
答案 0 :(得分:1)
您应该在跟踪侦听器配置中添加过滤器类型,如下所示
<system.diagnostics>
<sources>
<source name="System.ServiceModel" switchValue="Warning"
propagateActivity="true">
<listeners >
<add name="traceListener"
type="System.Diagnostics.XmlWriterTraceListener"
initializeData="C:\WCF-log.txt" >
<filter type="FilterExceptions"/>
</add>
</listeners>
</source>
</sources>
</system.diagnostics>
FilterException类型应继承System.Diagnostics.TraceListener并覆盖ShouldFilter方法,如下所示
public class FilterExceptions : TraceFilter
{
public override bool ShouldTrace(TraceEventCache cache, string source, TraceEventType eventType, int id, string formatOrMessage, object[] args, object data1, object[] data)
{
// Add exception filter in below if when event type is error
if (eventType == TraceEventType.Error)
{
return false;
}
return true;
}
}