我有一个记录到环形缓冲区的 CustomTraceListener:
namespace Sample
{
using System;
using System.Collections.Generic;
using System.Linq;
using Cognoware.Collections.Generic;
using Microsoft.Practices.EnterpriseLibrary.Common.Configuration;
using Microsoft.Practices.EnterpriseLibrary.Logging.Configuration;
using Microsoft.Practices.EnterpriseLibrary.Logging.TraceListeners;
[ConfigurationElementType(typeof(CustomTraceListenerData))]
public class CircularTraceListener: CustomTraceListener
{
private static RingBuffer<string> _ringBuffer = new RingBuffer<string>(200);
private string tmp = String.Empty;
public override void Write(string message)
{
tmp += message;
}
public override void WriteLine(string message)
{
_ringBuffer.Add(tmp + message);
tmp = String.Empty;
}
public IEnumerable<string> Messages
{
get
{
return _ringBuffer.AsEnumerable<string>();
}
}
}
}
它通常可以工作,但是我无法将其配置为使用自定义文本格式。在下面的配置中,我配置了两个跟踪侦听器,一个用于平面文件,另一个用于我的自定义侦听器。前者使用“Brief formatter”正确记录,而后者失败并使用默认格式。为什么?
<loggingConfiguration name="" tracingEnabled="true" defaultCategory="General">
<listeners>
<add listenerDataType="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.CustomTraceListenerData, Microsoft.Practices.EnterpriseLibrary.Logging, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
type="Sample.CircularTraceListener, CircularTraceListener, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
name="CircularTraceListener" formatter="Brief Formatter" />
<add name="Flat File Trace Listener" type="Microsoft.Practices.EnterpriseLibrary.Logging.TraceListeners.FlatFileTraceListener, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
listenerDataType="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.FlatFileTraceListenerData, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
fileName="trace.log" formatter="Brief Formatter" />
</listeners>
<formatters>
<add type="Microsoft.Practices.EnterpriseLibrary.Logging.Formatters.TextFormatter, Microsoft.Practices.EnterpriseLibrary.Logging, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
template="{timestamp} {message} {title} {dictionary({key} - {value}{newline})}"
name="Brief Formatter" />
</formatters>
<categorySources>
<add switchValue="All" name="General">
<listeners>
<add name="CircularTraceListener" />
<add name="Flat File Trace Listener" />
</listeners>
</add>
</categorySources>
</loggingConfiguration>