2009-04-30 7 views
0

Je suis nouveau avec TraceSource, donc je suis en train d'étudier comment il peut/ne peut pas être utilisé (essentiellement le pour et le contre). Quelque chose que j'aime, c'est que je peux obtenir des vidages depuis le framework .NET, j'ai donc fait une petite application pour tester ça et utiliser ma propre source personnalisée ensemble (comme je l'attendais) être utilisé), comme suit:Définition de plusieurs TraceSources ne fonctionnant pas

class Program 
{ 
    static void Main(string[] args) 
    { 
     SmtpClient smtp = new SmtpClient(); 
     var mm = new MailMessage(); 
     mm.To.Add("[email protected]"); 
     mm.Subject = "Trace Testing"; 
     smtp.Send(mm); 

     var ts = new TraceSource("MyCustomTracer"); 

     ts.TraceEvent(TraceEventType.Error, 0, "This is an error"); 
     ts.TraceEvent(TraceEventType.Information, 0, "Just debugging now"); 
    } 
} 

Je l'ai ensuite ajouté quelques auditeurs dans le App.config comme ceci:

<system.diagnostics> 
<trace autoflush="true" /> 
<sources> 
    <source name="MyCustomTracer" 
      switchValue="Information, ActivityTracing"> 
    <listeners> 
     <add name="sdt" 
      type="System.Diagnostics.XmlWriterTraceListener" 
      initializeData= "traceOutput.log" /> 
    </listeners> 
    </source> 
    <source name="System.Net" 
      switchValue="Information, ActivityTracing, Critical"> 
    <listeners> 
     <add name="sdt" 
      type="System.Diagnostics.XmlWriterTraceListener" 
      initializeData= "traceOutput.log" /> 
    </listeners> 
    </source> 
</sources> 
</system.diagnostics> 

Mais pour une raison quelconque quand je lance l'application des 2 événements que je suis exploitation forestière via MyCustomTracer ne vont pas dans le fichier journal, sauf si je commente le SmtpClient choses (c'est-à-dire que j'ai seulement mon traceur personnalisé utilisé).

Je m'attendais à ce que plusieurs TraceSources puissent être utilisées de la manière dont j'essaie de les utiliser, je ne suis pas sûr de ce qui ne va pas.

Répondre

1

Trouvé le problème, une erreur noob complète, mes deux éléments TraceSource ont un écouteur qui écrit dans le même fichier. Bien que je ne sois pas sûr exactement de l'erreur, mais ce serait une sorte de choc lors de l'écriture.

Si vous voulez avoir plusieurs sources en utilisant le même auditeur vous devez utiliser le <sharedListeners /> comme ceci:

<system.diagnostics> 
<trace autoflush="true" /> 
<sources> 
    <source name="MyCustomTracer" 
      switchValue="Information, ActivityTracing"> 
    <listeners> 
     <add name="sdt" /> 
    </listeners> 
    </source> 
    <source name="System.Net" 
      switchValue="Information, ActivityTracing, Critical"> 
    <listeners> 
     <add name="sdt" /> 
    </listeners> 
    </source> 
</sources> 
<sharedListeners> 
    <add name="sdt" 
     type="System.Diagnostics.XmlWriterTraceListener" 
     initializeData= "traceOutput.log" /> 
</sharedListeners> 
</system.diagnostics>