c# – 如何在wpf应用程序的Config文件中将自定义属性添加到tracelistener

我有以下日志文​​件tracelistener,它扩展了filelogtracelistener,它工作正常,我能够记录消息,但我想在此指定一个额外的自定义属性,例如MaxUsers及以下是它的外观.

 <add name="myFileListener" 
      type="MyCustomFileLogTraceListener, Microsoft.MyTools.Connections" 
      BaseFileName="IncidentTracking"
      Location="LocalUserDirectory" MaxUsers="500" />

目前此属性是自定义的,因此配置文件会出错.如何添加这样的自定义属性并将其消耗在我的代码中?

我认为解决方案是我们可以添加一个自定义配置部分,但想知道我们是否可以尝试一些更好的解决方案?

最佳答案 根据这篇文章,
TraceListener.Attributes Property获取应用程序配置文件中定义的自定义跟踪侦听器属性.

它还引用了:

Classes that are derived from the TraceListener class can add custom
attributes by overriding the GetSupportedAttributes method and
returning a string array of custom attribute names.

我能够像这样遵循this example来实现你想要的

string[] _supportedAttributes = new string[] { "MaxUsers", "maxusers", "maxUsers" };

/// <summary>
/// Allowed attributes for this trace listener.
/// </summary>
protected override string[] GetSupportedAttributes() {
    return _supportedAttributes;
}

/// <summary>
/// Get the value of Max Users Attribute 
/// </summary>
public int MaxUsers {
    get {
        var maxUsers = -1; // You can set a default if you want
        var key = Attributes.Keys.Cast<string>().
            FirstOrDefault(s => string.Equals(s, "maxusers", StringComparison.InvariantCultureIgnoreCase));
        if (!string.IsNullOrWhiteSpace(key)) {
            int.TryParse(Attributes[key], out maxUsers);
        }
        return maxUsers;
    }
}

这将允许我向配置文件添加自定义属性,看起来像

<add name="myFileListener" type="MyCustomFileLogTraceListener, Microsoft.MyTools.Connections" 
      BaseFileName="IncidentTracking"
      Location="LocalUserDirectory" MaxUsers="500" />

注意 :

在完全构造侦听器实例之前,不会从配置文件中填充Attributes集合.您需要确保在完全实例化侦听器对象之后但在首次使用它之前调用它.

点赞