2010-09-13 10 views
19

J'essaie d'apprendre les fonctions intégrées de traçage. Je n'arrive pas à comprendre comment utiliser la config pour définir le niveau (information, warn, error) qui s'écrit à mon écoute.comment contrôler le niveau d'un écouteur de trace dans le fichier de configuration

J'ai le fichier app.config par défaut. Dans mon code, j'utilise Trace.TraceInformation() et Trace.TraceError.

Tous les messages sont écrits dans mon fichier texte. Je veux pouvoir changer quelque chose dans le fichier app.config pour qu'il enregistre des messages d'information ou simplement des messages d'erreur.

Module1.vb

Sub Main(ByVal args() As String) 
    Dim index As Integer = 0 
    For Each arg As String In args 
     Trace.TraceInformation(String.Format("Sub Main(): arg({1}) = {0}", arg, index)) 
     Trace.Flush() 

     If arg.Split("=").Count = 2 Then 
      If String.Compare(arg.Split("=")(0), "mode", True) = 0 Then _Mode = arg.Split("=")(1) 
     End If 

     index += 1 
    Next 
End Sub 

app.config

<sources> 
     <!-- This section defines the logging configuration for My.Application.Log --> 
     <source name="DefaultSource"> 
      <listeners> 
       <add name="FileLog"/> 
       <!-- Uncomment the below section to write to the Application Event Log --> 
       <!--<add name="EventLog"/>--> 
      </listeners> 
     </source> 
    </sources> 
    <switches> 
     <add name="DefaultSwitch" value="1" /> 

    </switches> 
    <sharedListeners> 
     <add name="FileLog" 
      type="Microsoft.VisualBasic.Logging.FileLogTraceListener, Microsoft.VisualBasic, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" 
      initializeData="FileLogWriter"/> 
     <!-- Uncomment the below section and replace APPLICATION_NAME with the name of your application to write to the Application Event Log --> 
     <!--<add name="EventLog" type="System.Diagnostics.EventLogTraceListener" initializeData="HealthSurvey Console"/> --> 
    </sharedListeners> 

</system.diagnostics> 
+1

Je voudrais mettre l'accent sur les méthodes ce hors de Trace appelé TraceInformation, TraceError, TraceWarning. – MADCookie

+0

En regardant le code source de l'infrastructure, je suspecte que les méthodes Trace.TraceX ne prennent pas en charge les commutateurs. (d'où la raison pour laquelle vous deviez utiliser un filtre). – Schneider

+0

Pensez peut-être que vous devez utiliser TraceSource pour utiliser TraceSwitches, et Trace.TraceX statique ne pas utiliser un TraceSource – Schneider

Répondre

28

Je ne suis pas fan de répondre à vos questions, mais je n'aime pas laisser des questions sans marquer quelque chose comme la réponse. C'est particulièrement vrai quand j'ai trouvé ce que je cherchais. Ce numéro link avait les informations dont j'avais besoin. Je vais résumer parce que c'est assez long. Dans la configuration, vous ajoutez un écouteur. La clé dont j'avais besoin était d'utiliser le <filter> pour l'auditeur. Avec lui, je peux déployer mon application, puis modifier la configuration pour contrôler le texte écrit dans le fichier. Je pourrais ajouter un autre écouteur qui avait un filtre différent comme peut-être le journal des événements. De toute façon, la clé était <filter>. L'attribut initializeData est défini sur le texte de System.Diagnostics.SourceLevels enum.

  • information permet à l'information, avertissement et erreur
  • Attention permet d'alerte et erreur
  • Erreur permet erreur ne

app.config

<system.diagnostics> 
    <trace autoflush="false" indentsize="1"> 
    <listeners> 
     <add name="textListener" 
      type="System.Diagnostics.TextWriterTraceListener" 
      traceOutputOptions="None" 
      initializeData="C:\Projects\TraceLogOutput.log"> 
     <filter 
      type="System.Diagnostics.EventTypeFilter" 
      initializeData="Information"/> 
     </add> 
    <remove name="Default" /> 
    </listeners> 
</trace> 

module1.vb

Sub Main(ByVal args() As String) 

    ' initializeData = Information only 
    Trace.TraceInformation("Some Information message") 
    Trace.Flush() 

    ' initializeData = Information or Warning 
    Trace.TraceWarning("Some Warning message") 
    Trace.Flush() 

    ' initializeData = Information, Warning or Error 
    Trace.TraceError("Some Error message") 
    Trace.Flush() 

End Sub 
+5

Il n'y a rien de mal à répondre à vos propres questions – larsmoa