2015-11-04 78 views
0

道歉,如果这之前已经问过。诊断日志记录

我最近在我们的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

您内部<source>节点将属性switchValue的值更改为Critical,Error,那么这应该只记录这些事件。信息是一个在跟踪中通常发生的事件。

你可以,也许还看这里获得有关日志的详细信息:From zero to logging

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 />元素告诉听众只与临界或错误的事件类型写日志。这里的假设是,如果消息有问题,则会用Error事件类型标记。

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

简单地改变sharedListener类型:

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