【问题标题】:reading TraceListener initializedata property from config .NET 1.1从配置 .NET 1.1 中读取 TraceListener 初始化数据属性
【发布时间】:2009-11-20 11:06:39
【问题描述】:

我有以下配置文件:

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

有什么解决办法吗?

【问题讨论】:

    标签: .net app-config


    【解决方案1】:

    使用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);
      

      【讨论】:

      • 如果文件系统中不存在文件,这将崩溃。实际上这就是我需要该信息的原因-创建文件和文件夹:这应该这样做,尽管我得到的值为空:/ System.Reflection.FieldInfo fInfo = OurListener.GetType().GetField("initializeData", System. Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance); string filePath = (string)fInfo.GetValue(OurListener);
      【解决方案3】:

      如果在配置文件中指定了“initializeData”属性,则调用具有一个“name”参数的构造函数重载,并且该构造函数参数传递了“initializeData”属性值。 'name' 参数中传递的值也被分配给 TraceListener 的 'Name' 属性(而不是配置文件中的 'name' 属性的值)。

      【讨论】:

        猜你喜欢
        • 2018-07-20
        • 2014-07-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-10
        • 2017-02-21
        • 2020-02-20
        • 2012-12-15
        相关资源
        最近更新 更多