2009-07-24 12 views
60

J'ai implémenté un écouteur de trace personnalisé (dérivé de TextWriteTraceListener) et maintenant je voudrais définir mon application pour l'utiliser à la place du standard TextWriteTraceListener.Comment définir TraceListener personnalisé dans app.config

J'ai d'abord ajouté la valeur par défaut TextWriteTraceListener afin de m'assurer que tout fonctionne correctement. Voici mon app.config:

<configuration> 
    <system.diagnostics> 
     <trace autoflush="true" indentsize="4"> 
      <listeners> 
       <add name="TextListener" type="System.Diagnostics.TextWriterTraceListener" initializeData="trace.log" /> 
      <remove name="Default" /> 
      </listeners> 
     </trace> 
    </system.diagnostics> 
</configuration> 

Maintenant, mon écouteur de la trace est définie dans MyApp.Utils espace de noms et il est appelé FormattedTextWriterTraceListener. Donc, j'ai changé le type dans la configuration ci-dessus pour MyApp.Utils.FormattedTextWriterTraceListener et il semble actuellement comme ça:

<configuration> 
    <system.diagnostics> 
     <trace autoflush="true" indentsize="4"> 
      <listeners> 
       <add name="MyTextListener" type="MyApp.Utils.FormattedTextWriterTraceListener" initializeData="trace.log" /> 
      <remove name="Default" /> 
      </listeners> 
     </trace> 
    </system.diagnostics> 
</configuration> 

Mais maintenant, quand je tente de me connecter quelque chose que je reçois un ConfigurationErrorsException avec le message:

Couldn't find type for class MyApp.Utils.FormattedTextWriterTraceListener.

Est-ce que quelqu'un sait comment puis-je configurer cet écouteur personnalisé dans la configuration et si c'est encore possible?

Répondre

75

Essayez spécifier un ensemble aussi, comme ceci:

<configuration> 
    <system.diagnostics> 
     <trace autoflush="true" indentsize="4"> 
      <listeners> 
       <add name="TextListener" 
        type="MyApp.Utils.FormattedTextWriterTraceListener, MyApp" 
        initializeData="trace.log" /> 
      <remove name="Default" /> 
      </listeners> 
     </trace> 
    </system.diagnostics> 
</configuration> 
+0

nom de l'Assemblée est 'MyApp' et j'ajouté que à l'argument de type – RaYell

+1

j'edited poste, essayez de spécifier comme ça –

+1

Cela donne un message différent (même type d'exception) 'Impossible de créer MyApp.Utils.FormattedTextWriterTraceListener, MyApp. – RaYell

3

J'ai été aux prises avec ce récemment et juste au cas où il aide quelqu'un ...

Je savais que mon type existait donc j'écrit les éléments suivants:

Assembly assembly = System.Reflection.Assembly.GetAssembly(typeof("yourclassname")); 
Type myClassType = assembly.GetType("yournamespace.yourclassname"); 

dans mon cas, myClassType.AssemblyQualifiedName contenait la chaîne dont je avais besoin dans mon fichier app.config dans l'attribut de type.

Par exemple:

enter image description here

<system.diagnostics> 
    <sources> 
     <source name="System.ServiceModel" switchValue="Information,ActivityTracing" propagateActivity="true"> 
     <listeners> 
      <add name="CircularTraceListener" /> 
     </listeners> 
     </source> 
    </sources> 
    <sharedListeners> 
     <add name="CircularTraceListener" type="Microsoft.Samples.ServiceModel.CircularTraceListener, CircularTraceListener, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" 
      initializeData="C:\MyWebService\APILog\CircularTracing-service.svclog" maxFileSizeKB="1000" /> 
    </sharedListeners> 
    <trace autoflush="true" /> 
    </system.diagnostics>