从config .NET 1.1读取TraceListener initializedata属性

时间:2009-11-20 11:06:39

标签: .net app-config

我有以下配置文件:

  <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> 

所以我可以这样读取tracelisteners集合:

TraceListenerCollection tlc = System.Diagnostics.Trace.Listeners;

并从中获取TraceListener,但问题是,我无法访问initializeData属性。只有Name,Type,IndentLevel作为公共属性。

有解决方法吗?

3 个答案:

答案 0 :(得分:3)

使用System.Reflection

完成
FieldInfo fInfo = OurListener.GetType().GetField("initializeData", BindingFlags.NonPublic | BindingFlags.Instance); 
string filePath = (string)fInfo.GetValue(OurListener);

答案 1 :(得分:2)

var listener = (TextWriterTraceListener)Trace.Listeners["dbgTrace"];
var writer = (StreamWriter)listener.Writer;
var stream = (FileStream)writer.BaseStream;
Console.WriteLine(stream.Name);

答案 2 :(得分:1)

具有一个&#39;名称&#39;的构造函数重载如果&quot; initializeData&#39;属性在配置文件中指定,并且一个构造函数参数传递&#39; initializeData&#39;属性值。此外,&#39;名称&#39;中传递的值也是如此。参数被分配给&#39;名称&#39; TraceListener的属性(而不是配置文件中&#39; name&#39;属性的值)。