Поделиться через


Diagnostics SharedListeners vs Listeners

Shared Listener as the name suggests can be used by 2 or more trace sources(eg. Say one logs Messages and other logs Errors, Warnings etc) by using a friendly name. But if both of them plan to use the same tracefile,

Then the advantage here is you don’t have to repeat the Type, culture etc for the filename . See the highlighted portion below, this could be shared by different trace sources

These are the differences between the Listener and Shared Listener as per MSDN (https://msdn.microsoft.com/en-us/library/ms229501.aspx)

<sharedListeners> Contains listeners that any source or trace element can reference.

· These listeners do not receive any traces by default

· It is not possible to retrieve these listeners at run time.

· Listeners identified as shared listeners can be added to sources or traces by name.

· Adding a listener to the shared listeners collection does not make it an active listener. It must still be added to a trace source or a trace by adding it to the Listeners collection for that trace element

 

Sample with SharedListeners

<system.diagnostics>

<sources>

<source name="System.ServiceModel.MessageLogging" switchValue="Warning, ActivityTracing">

<listeners>

<add type="System.Diagnostics.DefaultTraceListener" name="Default">

<filter type="" />

</add>

<add name="ServiceModelMessageLoggingListener">

<filter type="" />

</add>

</listeners>

</source>

</sources>

<sharedListeners>

<add initializeData="d:\web_messages.svclog"

type="System.Diagnostics.XmlWriterTraceListener, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"

name="ServiceModelMessageLoggingListener" traceOutputOptions="Timestamp">

<filter type="" />

</add>

</sharedListeners>

<trace autoflush="true" />

</system.diagnostics>

Sample without SharedListeners

 

<system.diagnostics>

<trace useGlobalLock="false" />

<sources>

<source name="System.ServiceModel" switchValue="Information, ActivityTracing"

>

<listeners>

<add initializeData="POCTraces.svclog" type="System.Diagnostics.XmlWriterTraceListener"

name="ourtraceListener" traceOutputOptions="LogicalOperationStack">

</add>

</listeners>

</source>

</sources>

</system.diagnostics>