2009-11-20 4 views
1

.NET je le fichier de configuration suivante:lecture TraceListener initializeData propriété de config 1.1

<system.diagnostics> 
    <trace autoflush="true" indentsize="1" > 
     <listeners> 
     <add name="dbgTrace" type="System.Diagnostics.TextWriterTraceListener" initializeData="C:\MyLogs\MyApp\Logs\LogFile.log" /> 
     </listeners> 
    </trace> 
    </system.diagnostics> 

Je peux donc lire la collection tracelisteners comme ceci:

TraceListenerCollection tlc = System.Diagnostics.Trace.Listeners; 

et obtenir le TraceListener de celui-ci, mais le problème est que je ne peux pas accéder à la propriété initializeData. Il n'y a que Name, Type, IndentLevel en tant que propriétés publiques.

Y a-t-il une solution de contournement?

Répondre

3

fait en utilisant System.Reflection:

FieldInfo fInfo = OurListener.GetType().GetField("initializeData", BindingFlags.NonPublic | BindingFlags.Instance); 
string filePath = (string)fInfo.GetValue(OurListener); 
2
var listener = (TextWriterTraceListener)Trace.Listeners["dbgTrace"]; 
var writer = (StreamWriter)listener.Writer; 
var stream = (FileStream)writer.BaseStream; 
Console.WriteLine(stream.Name); 
+0

cela se bloque si le fichier n'existe pas dans le système de fichiers. En fait, c'est la raison pour laquelle j'ai besoin de cette information - pour créer un fichier et un dossier: Cela devrait le faire, bien que la valeur que j'obtienne soit nulle:/ System.Reflection.FieldInfo fInfo = OurListener.GetType(). GetField ("initializeData" , System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance); chaîne filePath = (chaîne) fInfo.GetValue (OurListener); –

1

La surcharge du constructeur qui a un paramètre « nom » est appelé si l'attribut « initializeData » est spécifié dans le fichier de configuration, et qu'un paramètre de constructeur transmet le Valeur d'attribut 'initializeData'. La valeur transmise dans le paramètre 'name' est également affectée à la propriété 'Name' du TraceListener (au lieu de la valeur de l'attribut 'name' dans le fichier de configuration).