我想將跟蹤信息保存到.svclog文件中,但僅限於失敗的請求。這可能嗎?如果是這樣,確切地說?WCF只跟蹤失敗的請求?
我有這就是所謂的每分鐘幾百次的WCF服務。在極少數情況下,客戶端會在WCF內部運行的代碼的邊界之外發生錯誤500(通常是安全問題)。我想知道這些錯誤發生的原因以及導致它們的原因。
我也真的想使用跟蹤查看器工具來檢查.svclog文件。
據我所知,我有兩個選擇: 1)通過system.webServer \ tracing設置記錄失敗請求的儀器FERB跟蹤。不幸的是,我真的不喜歡IE跟蹤查看器的界面,也沒有從跟蹤日誌中得到足夠的信息來找出爲什麼我的代碼之外出現錯誤。
2)打開下System.Diagnostics程序\跡線部分的全球跟蹤。本部分會生成很棒的跟蹤日誌,並記錄下我所需要的所有內容。但是,我無法找到一種方法來捕獲失敗請求的信息。本部分捕獲所有請求的跟蹤信息。我的跟蹤記錄很快就填滿了!
我的錯誤500是間歇性和罕見的。最終,我希望始終讓我的.svclog跟蹤開啓,但只有在發生失敗請求時纔會啓動它。
如果可能,請諮詢您的意見嗎?
謝謝!
編輯:
格雷厄姆, 我已經按照你的建議,我沒有看到我所期望的日誌。下面是從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>
不幸的是可以被任意的跟蹤監聽器的記錄NOTHING。 失敗請求日誌中包含的:
-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
我會建議使用警告級別最初直到你確定了錯誤。 – softveda 2010-11-19 09:36:04
@ Pratik-聽起來夠公平 - 什麼會觸發警告?我可以看到拋出一個異常將意味着一個錯誤... – 2010-11-19 09:38:57
有時警告事件可能出現在實際的錯誤之前,並可以給錯誤提供額外的見解。 – softveda 2010-11-21 22:48:02