什么是<;消息记录>;标记内的do<;系统诊断>&书信电报;诊断学>;在生产WCF系统中包含是否不好?
在WCF服务的production web.config文件中,我看到了下面包含的配置,我想知道什么是<;消息记录>;标记内的do<;系统诊断>&书信电报;诊断学>;在生产WCF系统中包含是否不好?,wcf,trace,Wcf,Trace,在WCF服务的production web.config文件中,我看到了下面包含的配置,我想知道标记的影响是什么(如果有的话)?基于这个标签不应该在那里,但我想知道它的影响是什么。如果可能的话,我更愿意留下它(它安装在许多站点上,因此更新起来会很痛苦),前提是它不会对性能产生重大影响 <system.serviceModel> ... (lots more stuff) ... <diagnostics wmiProviderEnabled="true"
标记的影响是什么(如果有的话)?基于这个标签不应该在那里,但我想知道它的影响是什么。如果可能的话,我更愿意留下它(它安装在许多站点上,因此更新起来会很痛苦),前提是它不会对性能产生重大影响
<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>
... (更多的东西)。。。
与大多数诊断问题一样,答案是“视情况而定”
它做什么:
标记设置了当侦听器发现消息并决定记录它时应该记录的内容。如果您只有diagnostics\messageLogging
标记设置,而没有任何类型的“源”设置,那么它将完全不起作用。(以下是每个设置的含义:)
在代码示例中,您确实有一个源代码。源代码来自系统。ServiceModel
和开关值设置为仅侦听警告消息。在sharedlistener
下还有一个xmlwritertracelistener
,它基本上是一个xml日志编写器。initializeData
值就是这个xml日志文件的名称。查看应用程序根目录,您应该会看到一个名为ServiceTrace.svclog
的文件
因此,基本上您的应用程序只记录警告级别的WCF消息,记录完整消息,并且只保留3000个日志
生产中是否包含不良内容?
这要看情况。如果您的应用程序每小时被攻击数百万次,需要每盎司的速度,每一个CPU周期,我都会删除它。如果没有,那我就把它放在里面。根据我看到的和其他人报告()的计时,设置“警告”对性能的影响可以忽略不计。如果启用调试/信息/活动跟踪,则情况就不同了,会降低性能
如果您确实有一个bug或者您的服务变得不稳定,那么这些日志可能是有益的
如果您现在正在生产环境中运行此功能,请查看ServiceTrace.svclog文件并查看其中有多少条目。如果你每秒钟记录很多日志,那么我会将其关闭(或修复警告)。您可以使用SvcTraceViewer.exe查看实际跟踪 谢谢!我对记录到ServiceTrace.svclog的跟踪有一个了解,我想知道的是,打开WMI是否会有额外的开销。从你的回答来看,这似乎是一个“不”,对吗?轻微的开销。我们每次通话可能会通话一毫秒(如果是的话)。我将继续运行一些负载测试,以验证在您的场景中您是否看到了这种类型的性能。打开它而不记录任何内容是非常简单的。当达到messageLogging元素中定义的maxMessagesToLog限制时会发生什么?是否保留了最后n个日志条目(最近),其中n最多为maxMessagesToLog?在这里再添加一个问题-当我测试logEntireMessage时,整个消息在服务日志中以纯文本形式随时可用。出于安全考虑,是否可以对日志中的信息进行加密?当然,只有系统管理员才能访问.svclog文件,但是是否可以调整记录的消息,例如通过WCF消息检查器?