我有以下日志文件tracelistener,它扩展了filelogtracelistener,它工作正常,我可以记录消息,但我想在此指定一个额外的自定义属性,例如MaxUsers及以下是它的外观。
<add name="myFileListener"
type="MyCustomFileLogTraceListener, Microsoft.MyTools.Connections"
BaseFileName="IncidentTracking"
Location="LocalUserDirectory" MaxUsers="500" />
目前此属性是自定义的,因此配置文件会出错。如何添加这样的自定义属性并将其消耗在我的代码中?
我认为解决方案是我们可以添加自定义配置部分,但想知道我们是否可以尝试使用更好的解决方案?
答案 0 :(得分:3)
根据这篇文章,TraceListener.Attributes Property获取应用程序配置文件中定义的自定义跟踪侦听器属性。
它也引用了:
从 TraceListener 类派生的类可以添加自定义 通过覆盖 GetSupportedAttributes 方法和 返回自定义属性名称的字符串数组。
我能够按照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集合。您需要确保在完全实例化侦听器对象之后,但在首次使用它之前调用它。
答案 1 :(得分:-1)
不可以更改架构,因此您必须添加自定义部分。 有很多文章解释了如何像这样做create a custom config section