加载跟踪侦听器属性

War*_*War 5 c# configuration trace tracelistener

所以我有一个自定义跟踪监听器,它开始它的生命如下:

http://www.codeproject.com/Articles/30956/A-Rolling-XmlWriterTraceListener

我已将其修改为更像Log4Net RollingFileAppender(请参阅:http://logging.apache.org/log4net/release/sdk/log4net.Appender.RollingFileAppender.html)

当我运行代码时,我发现它没有从配置文件中的自定义属性设置属性/字段值.

在运行时分析对象会发现Attributes属性(this.Attributes)不包含任何内容.

有什么想法我会解决这个问题吗?

我应该手动填充这些还是什么?

好的,这是一个代码示例:

[HostProtection(Synchronization = true)]
public class RollingXmlWriterTraceListener : XmlWriterTraceListener
{
    public RollingXmlWriterTraceListener(string filename)
        : base(filename)
    {
        _basicTraceFileName = filename;
        LoadAttributes();
    }
Run Code Online (Sandbox Code Playgroud)

在LoadAttributes方法中,我然后做...

if (Attributes.ContainsKey("maxTraceFileCount"))
{
   string attributeValue = Attributes["maxTraceFileCount"];
Run Code Online (Sandbox Code Playgroud)

问题是"属性"从不包含任何内容.该类使用包含属性的配置信息从框架代码实例化...

 <sharedListeners>
    <add type="emedia.Common.Wcf.RollingXmlWriterTraceListener, emedia.Common.Wcf" 
         name="System.ServiceModel.XmlTrace.Listener" 
         traceOutputOptions="None" 
         initializeData="C:\Logs\MyTraceFileName.svclog" 
         MaxTraceFileSize="1048576"
         MaxTraceFileCount="10"
    />
 </sharedListeners>
Run Code Online (Sandbox Code Playgroud)

编辑2:

XmlWriterTraceListener类是.Net的一部分,它是继承Attributes属性的基类.

在配置中我应该能够指定任何属性然后在代码中执行类似的操作...

var attValue = Attributes["something"];
Run Code Online (Sandbox Code Playgroud)

...但由于某种原因,它返回null(属性不在集合中).

MrU*_*own 7

在完全构造侦听器实例之前,不会从配置文件中填充Attributes集合.

除了在构造函数中调用LoadAttributes方法之外,您还需要确保在完全实例化侦听器对象之后但在第一次使用它之前调用它.