トレース情報を.svclogファイルに保存したいが、失敗したリクエストのみに保存したい。これは可能ですか?もしそうなら、いかに正確に?要求が失敗したWCFトレースのみ?
私は毎分何百回も呼ばれるWCFサービスを持っています。ごくまれに、クライアントは、WCF内で実行されているコードの境界(通常セキュリティ上の問題)の外で発生するエラー500を受け取ります。私はこれらのエラーがなぜ起こっているのか、何が起こっているのかを正確に知りたい。
また、トレースビューアツールを使用して.svclogファイルを調べることも本当に好きです。
私の知る限り、2つのオプションがあります。 1)instrument.webServer \ tracing設定で失敗したリクエストを記録することによって、FERBトレースを計測します。残念ながら、私は本当にIEのトレースビューアのインターフェイスが嫌いですし、トレースログから十分な情報を得て、なぜコード外のエラーが発生したのかわかりません。
2)system.diagnostics \ traceセクションのグローバルトレースをオンにします。このセクションでは、私が今までに望むことのできるものをすべて記録した素晴らしいトレースログを作成します。しかし、私は失敗したリクエストの情報だけをキャプチャする方法を見つけることができません。このセクションでは、すべての要求のトレース情報を取得します。私のトレースログはすぐにいっぱいです!
私のエラー500は断続的で、まれです。最終的には、私の.svclogトレースを常にONにしたいが、失敗したリクエストが発生した場合にのみ起動させる。
これが可能ならアドバイスをお願いします。
ありがとうございました!
編集:
グラハム、 私はあなたのアドバイスに従っていると私は私が期待したログが表示されません。ここでは、web.configファイルから関連セクションは、以下のとおりです。ここで
<system.diagnostics>
<trace>
<listeners>
<add type="Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener, Microsoft.WindowsAzure.Diagnostics, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" name="AzureDiagnostics">
<filter type="" />
</add>
</listeners>
</trace>
<sources>
<source name="System.ServiceModel" switchValue="Error">
<listeners>
<add name="wcfTracing"
type="System.Diagnostics.XmlWriterTraceListener"
initializeData="Traces1.svclog"/>
<add name="log4netTracing"
type="AzureWatch.Model.Service.Log4netTraceListener,AzureWatch.Model.Service"/>
</listeners>
</source>
<source name="System.ServiceModel.MessageLogging" switchValue="Error">
<listeners>
<add name="wcfTracing"
type="System.Diagnostics.XmlWriterTraceListener"
initializeData="Traces2.svclog"/>
<!--<add name="log4netTracing"
type="AzureWatch.Model.Service.Log4netTraceListener,AzureWatch.Model.Service"/>-->
</listeners>
</source>
</sources>
</system.diagnostics>
<!-- ... -->
<diagnostics wmiProviderEnabled="true">
<messageLogging
logEntireMessage="true"
logMalformedMessages="true"
logMessagesAtServiceLevel="true"
logMessagesAtTransportLevel="true"
maxSizeOfMessageToLog="1000000"
maxMessagesToLog="-1" />
</diagnostics>
は、WCFのクライアントエラーです:
<Exception>
<Type>System.Net.Sockets.SocketException</Type>
<Message>An existing connection was forcibly closed by the remote host</Message>
<StackTrace>
<Frame>at System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)</Frame>
</StackTrace>
</Exception>
は残念ながらトレースリスナーのいずれかによって記録されています何もありません。 失敗した要求のログはこれを含んでいます
-GENERAL_READ_ENTITY_END
BytesReceived 0
ErrorCode 2147943395
ErrorCode The I/O operation has been aborted because of either a thread exit or an application request. (0x800703e3)
Warning
-MODULE_SET_RESPONSE_ERROR_STATUS
ModuleName ManagedPipelineHandler
Notification 128
HttpStatus 400
HttpReason Bad Request
HttpSubStatus 0
ErrorCode 0
ConfigExceptionInfo
Notification EXECUTE_REQUEST_HANDLER
ErrorCode The operation completed successfully. (0x0)
0 msInformational
としてEventTypeFilterで指定することも可能だと確信し、私は、少なくとも警告レベルを使用することをお勧めしません最初はあなたがエラーを摘発するまで。 – softveda
@ Pratik-十分に聞こえる - 何が警告を引き起こすでしょうか?例外をスローするとエラーが発生することがわかります... –
時には警告イベントが実際のエラーの前に表示され、エラーをさらに詳しく知ることができます。 – softveda