0
  1. ある種の例外がWCFトレースに記録されないようにする方法はありますか?
  2. さらに良いことに、1つの特定の例外(つまり、特定のコード行で1つの例外がスローされる)がログに記録されないようにする方法はありますか?

説明:

私は2つの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ファイルを調べる必要があります。問題。

4

1 に答える 1

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;
        }
    }
于 2013-01-31T07:35:12.927 に答える