诊断记录

Diagnostic Logging

抱歉,如果之前有人问过这个问题。

我最近在我们的 C# 解决方案上启用了诊断消息记录。但是,我认为我从网络上获得的标准示例记录了太多事件。

我能否调整此消息记录器以仅记录系统中遇到的严重错误?我在这个消息记录方面还是个新手,所以如果我知道该怎么做,我就不会问你们了。

我当前的设置:

 <system.serviceModel>
<diagnostics>
  <!-- Enable Message Logging here. -->
  <!-- log all messages received or sent at the transport or service model levels >-->
  <messageLogging logEntireMessage="true" maxMessagesToLog="300" logMessagesAtServiceLevel="true" logMalformedMessages="true" logMessagesAtTransportLevel="true" />
</diagnostics>

<system.diagnostics>
<sources>
  <source name="System.ServiceModel" switchValue="Information,ActivityTracing" propagateActivity="true">
    <listeners>
      <add name="xml" />
    </listeners>
  </source>
  <source name="System.ServiceModel.MessageLogging">
    <listeners>
      <add name="xml" />
    </listeners>
  </source>
</sources>
<sharedListeners>
  <add initializeData="C:\logs\Diagnostics.svclog" type="System.Diagnostics.XmlWriterTraceListener" name="xml" />
</sharedListeners>
<trace autoflush="true" />

这一切当然在我App.config。我只在这里使用它,而不是在我的代码或其他任何地方。它有效,但对我来说,保存的信息太多了。我可以只保存 major/critical 个错误吗?

C#项目,Visual Studio 2015,Windows10,如需更多,请询问。

在您 <source> 节点中将属性 switchValue 的值更改为 Critical, Error 然后这应该只记录那些事件。信息是追踪中普遍存在的事件。

您也许还可以查看此处以获取有关日志记录的更多信息:From zero to logging

设置中日志过多的问题出现在 System.ServiceModel.MessageLogging 侦听器中;您告诉 ServiceModel 记录所有服务消息,这很好。但是,如果您只想记录 ServiceModelServiceModel.MessageLogging 的错误消息,则需要为 sharedListener.

创建一个过滤器

以下诊断配置工作得很好:

<system.diagnostics>
<sources>
  <source name="System.ServiceModel">
    <listeners>
      <add name="xml" />
    </listeners>
  </source>
  <source name="System.ServiceModel.MessageLogging">
    <listeners>
      <add name="xml" />
    </listeners>
  </source>
</sources>
<switches>
  <add name="System.ServiceModel" value="Critical, Error"/>
</switches>
<sharedListeners>
  <add initializeData="Diagnostics.svclog" type="System.Diagnostics.XmlWriterTraceListener" name="xml">
    <filter type="System.Diagnostics.EventTypeFilter" initializeData="Critical, Error"/>
  </add>
</sharedListeners>
<trace autoflush="true" />

<filter /> 元素告诉侦听器只写入 EventType 为 Critical 或 Error 的日志。这里的假设是,如果一条消息有问题,它将被标记为错误事件类型。

此外,您可以创建一个 rolling or daily XmlWriterTraceListener 以分别按文件大小或每天开始一个新日志。

只需更改 sharedListener 类型:

<add initializeData="Diagnostics.svclog"
    type="My.Namespace.MyXmlWriterTraceListener, MyAssembly" 
    name="xml">
   ...
</add>