我有以下配置文件:
<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作为公共属性。
有解决方法吗?
答案 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;属性的值)。