2016-09-15 2 views
0

Je recherche comment utiliser le System.Diagnosticstracing functionality correctement, mais ne parvient pas à faire fonctionner mon code. J'ai déjà lu les documents officiels sur configuring tracing, creating and initializing trace listeners, l'élément source de l'app.config et certains posts de stackoverflow associés. Le doc msdn à propos TraceSource m'a fait vraiment confus ...Fonctionnalité de traçage natif ne produit pas de sortie

Mon app.config contient la section suivante:

<system.diagnostics> 
    <sources> 
     <source name="ApplicationTraceSource" switchName="ApplicationTraceSwitch" switchType="System.Diagnostics.SourceSwitch"> 
      <listeners> 
       <add name="EventLogListener" type="System.Diagnostics.EventLogTraceListener" initializeData="PDS"  /> 
       <add name="TextLogListener" type="System.Diagnostics.TextWriterTraceListener" initializeData="PDS.log" /> 
       <add name="ConsoleLogListener" type="System.Diagnostics.ConsoleTraceListener" /> 

       <remove name="Default" /> 
      </listeners> 
     </source> 
     <source name="DatabaseActivitySource" switchName="DatabaseActivityTraceSwitch" switchType="System.Diagnostics.SourceSwitch"> 
      <listeners> 
       <add name="QueryTextLogListener" type="System.Diagnostics.TextWriterTraceListener" initializeData="Queries.log" /> 

       <remove name="Default" /> 
      </listeners> 
     </source> 
    </sources> 

    <switches> 
     <!--Set value to 0 to turn of database activity log.--> 
     <add name="DatabaseActivityTraceSwitch" value="1" /> 

     <!--Set value to 0 to turn of application log. 1 for errors. 2 for errors und warnings. 3 for more detailed error information. 4 for verbose trace information.--> 
     <add name="ApplicationTraceSwitch" value="4" /> 
    </switches> 
</system.diagnostics> 

Mon code dans mon Program.cs est aussi simple que possible obtient:

if (EventLog.SourceExists("PDS") == false) 
{ 
    EventLog.CreateEventSource("PDS", "EventLogListener"); 
} 

TraceSource applicationTraceSource = new TraceSource("ApplicationTraceSource"); 

applicationTraceSource.TraceInformation("i am information"); 

applicationTraceSource.TraceEvent(TraceEventType.Error, 1, "i am error event"); 
applicationTraceSource.TraceEvent(TraceEventType.Warning, 2, "i am warning event"); 
applicationTraceSource.TraceEvent(TraceEventType.Information, 3, "i am information event"); 
applicationTraceSource.TraceEvent(TraceEventType.Verbose, 4, " am verbose event"); 

applicationTraceSource.TraceData(TraceEventType.Error, 5, "i am error data"); 
applicationTraceSource.TraceData(TraceEventType.Warning, 6, "i am warning data"); 
applicationTraceSource.TraceData(TraceEventType.Information, 7, "i am information data"); 
applicationTraceSource.TraceData(TraceEventType.Verbose, 8, " am verbose data"); 

applicationTraceSource.Flush(); 

Le fichier PDS.log est en cours de création, mais il est vide. Le journal des événements est vide. La sortie de la console est vide.

Quelqu'un peut-il me donner un indice?

Répondre

0

Le problème était que j'ai regardé le TraceEventType et TraceLevel enum pour définir ma valeur du switch dans le app.config.

Le correct enum pour cet attribut est le drapeau SourceLevels. J'ai changé la valeur de switch. À la suite des solutions travaillent maintenant (si je veux tracer chaque événement):

<add name="ApplicationTraceSwitch" value="-1" /> 

ou

<add name="ApplicationTraceSwitch" value="ALL" />