诊断记录

时间:2015-11-04 14:30:58

标签: c# .net event-log event-listener

如果之前有人问过,请道歉。

我最近在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中。我只在这里使用它,而不是在我的代码或其他任何地方。它有效,但对我来说,有太多的信息被保存。我可以保存主要/严重错误吗?

C#项目,Visual Studio 2015,Windows 10.如果您需要更多,请询问。

2 个答案:

答案 0 :(得分:2)

在你<source>节点内,将属性switchValue的值更改为Critical,Error然后这应该只记录这些事件。信息是一种通常在跟踪中到处发生的事件。

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

答案 1 :(得分:1)

您的设置中过多日志的问题发生在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的日志。这里的假设是,如果消息有问题,它将被标记为错误事件类型。

此外,您可以创建rollingdaily XmlWriterTraceListener来分别按文件大小或每天开始新的日志。

只需更改sharedListener类型:

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