2011-11-29 28 views
0

在WCF服务的生产web.config文件中,我看到下面包含的配置,并且想知道<messageLogging>标记的影响是什么(如果有的话)?基于Recommended Settings for Tracing and Message Logging该标签不应该在那里,但我想知道它的影响。如果可能的话,我宁愿留下它(这是安装在许多网站上,所以更新会很痛苦),前提是它没有显着的性能影响。<messagelogging>标记在<system.diagnostics><diagnostics>中做了什么?它是否包含在Production WCF系统中?

<system.serviceModel> 

    ... (lots more stuff) ... 

    <diagnostics wmiProviderEnabled="true"> 
     <messageLogging logEntireMessage="true" logMalformedMessages="true" logMessagesAtServiceLevel="true" logMessagesAtTransportLevel="true" maxMessagesToLog="3000" /> 
    </diagnostics> 
    </system.serviceModel> 

    <system.diagnostics> 
    <sources> 
     <source name="System.ServiceModel" switchValue="Warning" propagateActivity="true"> 
     <listeners> 
      <add name="xml" /> 
     </listeners> 
     </source>  
    </sources> 

    <sharedListeners> 
     <add name="xml" type="System.Diagnostics.XmlWriterTraceListener" initializeData="ServiceTrace.svclog" /> 
    </sharedListeners> 
    </system.diagnostics> 

回答

1

与大多数诊断问题一样,答案是“It Depends”。

它是做什么的: 该标记设置了如果侦听器发现一条消息并决定记录它应记录的内容。如果你只设置了diagnostics\messageLogging标签而没有任何“源”设置,那么它绝对不会做任何事情。 (以下是每个设置的含义:http://msdn.microsoft.com/en-us/library/ms731308.aspx

在您的代码示例中,您确实有源代码。来源是从System.ServiceModelswitchValue设置为只收听警告消息。你也有xmlwritertracelistenersharedlistener这基本上是一个XML日志作家。 initializeData值是此xml日志文件的名称。查看您的应用程序根目录,您应该看到一个名为ServiceTrace.svclog的字段。

因此,基本上,您的应用程序仅记录WCF消息的警告级别,记录完整消息,并且只保留3000条这些日志。

不好包括在生产中? 这取决于。如果您的应用程序每小时击中数百万次,需要每盎司的速度,并且CPU的每个周期都会将其移除。如果没有,那么我会保持它。根据我见过的时间和其他人报告(https://stackoverflow.com/a/2323411/44336)设置“警告”的性能影响可以忽略不计。如果您打开调试/信息/活动跟踪是另一回事,并会降低性能。

如果您确实有错误或您的服务变得不稳定,那么这些日志可能会有所帮助。

如果您现在正在执行此操作,请查看ServiceTrace.svclog文件并查看其中有多少条目。如果您记录了很多秒,那么我会关闭它(或修复警告)。您可以使用SvcTraceViewer.exe查看实际跟踪。

+0

谢谢!我了解了记录到ServiceTrace.svclog的跟踪信息,我想知道是否有额外的开销使用WMI。从你的答案看来,这是一个'不',对吗? – Rory

+1

轻微的开销。每次通话的话可能只有毫秒(如果有的话)。我会继续并运行一些负载测试来验证您的场景中您看到了这种类型的性能。打开它并且不记录任何内容是非常简单的。 –

+0

非常好,谢谢.. – Rory

相关问题