WCF仅跟踪失败的请求?
我想将跟踪信息保存到.svclog文件中,但仅用于失败的请求。这可能吗?如果是,准确程度如何 我有一个WCF服务,每分钟呼叫数百次。在极少数情况下,客户端会在WCF内运行的代码边界之外出现错误500(通常是安全问题)。我想知道为什么会发生这些错误,以及是什么导致了这些错误 我还想使用跟踪查看器工具检查.svclog文件 据我所知,我有两个选择: 1) 通过system.webServer\tracing设置记录失败的请求,对FERB进行仪器跟踪。不幸的是,我真的不喜欢IE trace viewer的界面,也没有从跟踪日志中获得足够的信息来找出代码之外发生错误的原因 2) 打开system.diagnostics\trace部分下的全局跟踪。这一部分生成了很棒的跟踪日志,其中包含了我想要的所有捕获内容。但是,我无法找到一种方法来仅捕获失败请求的信息。本节捕获所有请求的跟踪信息。我的跟踪日志很快就满了 我的错误是断断续续和罕见的。最终,我希望始终启用.svclog跟踪,但只有在请求失败时才启用它 如果可能的话,请给出建议 谢谢大家! 编辑: 格雷厄姆, 我听从了你的建议,但我没有看到我期望的日志。以下是web.config中的相关部分:WCF仅跟踪失败的请求?,wcf,trace,svctraceviewer,Wcf,Trace,Svctraceviewer,我想将跟踪信息保存到.svclog文件中,但仅用于失败的请求。这可能吗?如果是,准确程度如何 我有一个WCF服务,每分钟呼叫数百次。在极少数情况下,客户端会在WCF内运行的代码边界之外出现错误500(通常是安全问题)。我想知道为什么会发生这些错误,以及是什么导致了这些错误 我还想使用跟踪查看器工具检查.svclog文件 据我所知,我有两个选择: 1) 通过system.webServer\tracing设置记录失败的请求,对FERB进行仪器跟踪。不幸的是,我真的不喜欢IE trace viewe
<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服务输入以下配置,并使用有效和无效凭据访问该服务。只有具有无效凭据的请求才导致服务跟踪文件中出现任何内容。我的服务使用一个自定义的
UserNamePasswordValidator
类,它出现在堆栈跟踪中。重要的部分是
元素中的switchValue=“Error”和propagateActivity=“false”
。不确定这是否正是你想要的,但至少看起来很接近
<system.diagnostics>
<sources>
<source name="System.ServiceModel" switchValue="Error"
propagateActivity="false">
<listeners>
<add type="System.Diagnostics.DefaultTraceListener" name="Default">
<filter type="" />
</add>
<add name="ServiceModelTraceListener">
<filter type="" />
</add>
</listeners>
</source>
</sources>
<sharedListeners>
<add initializeData="C:\Path-to-log-file\Web_tracelog.svclog"
type="System.Diagnostics.XmlWriterTraceListener, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
name="ServiceModelTraceListener"
traceOutputOptions="DateTime, Timestamp, Callstack">
<filter type="" />
</add>
</sharedListeners>
<trace autoflush="true" />
</system.diagnostics>
或者,可以将EventTypeFilter指定为侦听器的
我建议至少在最初使用警告级别,直到您确定错误。@Pratik-听起来很公平-什么会触发警告?我可以看到抛出异常意味着错误……有时警告事件可能会出现在实际错误之前,并且可以提供错误的更多信息。
-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
<system.diagnostics>
<sources>
<source name="System.ServiceModel" switchValue="Error"
propagateActivity="false">
<listeners>
<add type="System.Diagnostics.DefaultTraceListener" name="Default">
<filter type="" />
</add>
<add name="ServiceModelTraceListener">
<filter type="" />
</add>
</listeners>
</source>
</sources>
<sharedListeners>
<add initializeData="C:\Path-to-log-file\Web_tracelog.svclog"
type="System.Diagnostics.XmlWriterTraceListener, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
name="ServiceModelTraceListener"
traceOutputOptions="DateTime, Timestamp, Callstack">
<filter type="" />
</add>
</sharedListeners>
<trace autoflush="true" />
</system.diagnostics>
<listeners>
<add name="console"
type="System.Diagnostics.ConsoleTraceListener" >
<filter type="System.Diagnostics.EventTypeFilter"
initializeData="Error" />
</add>
</listeners>