所以我有一个自定义跟踪监听器,它的生命是这样开始的:
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();
}
在 LoadAttributes 方法中,我然后做......
if (Attributes.ContainsKey("maxTraceFileCount"))
{
string attributeValue = Attributes["maxTraceFileCount"];
问题是“属性”从不包含任何内容。此类使用包含属性的配置信息从框架代码实例化...
<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>
编辑2:
XmlWriterTraceListener 类是 .Net 的一部分,通过使我的基类继承 Attributes 属性。
在配置中,我应该能够指定任何属性,然后在代码中执行类似...
var attValue = Attributes["something"];
...但由于某种原因,这会返回 null (该属性不在集合中)。