【发布时间】:2011-11-07 18:22:38
【问题描述】:
我是 Enterprise Library 的新手(5,带有可选更新),并且正在尝试将我自己的 CustomTraceListener 与 Logging Block 一起使用。
日志记录与提供的平面文件侦听器一起工作,但我似乎无法将其扩展到我的自定义类。
记录到 FlatFileListener,但不记录到我的 CustomListener:
static UnityContainer _container;
static LogWriter _writer;
internal static void Inf(this string message)
{
if (_container == null)
{
_container = new UnityContainer();
_container.AddNewExtension<EnterpriseLibraryCoreExtension>();
}
if (_writer == null && _container != null)
{
_writer = _container.Resolve<LogWriter>();
LogEntry log = new LogEntry();
log.Message = message;
log.Categories.Add("Information");
log.Severity = TraceEventType.Information;
_writer.Write(log);
}
}
我的 CustomListener 基于bychkov:
namespace Test.Catch
{
[ConfigurationElementType(typeof(CustomTraceListenerData))]
public class LoggerCustom : CustomTraceListener
{
public override void TraceData(TraceEventCache eventCache, string source, TraceEventType eventType, int id, object data)
{
if (data is LogEntry && this.Formatter != null)
{
this.WriteLine(this.Formatter.Format(data as LogEntry));
} else
{
this.WriteLine(data.ToString());
}
}
public override void Write(string message)
{
Trace.Write(message);
}
public override void WriteLine(string message)
{
Trace.WriteLine(message);
}
}
}
首先我尝试使用配置编辑器添加 customtracelistener,但配置编辑器没有列出/检测任何 customtracelistener,我怀疑这是问题的一部分还是全部?
因此,我再次基于bychkov 添加了以下内容:
app.config监听器手动添加
<add listenerDataType="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.CustomTraceListenerData, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.505.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
type="Test.Catch.LoggerCustom, Test.Catch" traceOutputOptions="None"
name="Custom Trace Listener" initializeData="" formatter="Text Formatter Plain" />
现在,当我调用 Inf("logme") 时,包含上述 app.config 添加,然后在 _container.AddNewExtension() 处引发异常: 无法解析类型“Test.Catch.LoggerCustom,Test.Catch”。
鉴于我不了解底层机制,我如何使用自定义侦听器进行日志记录?
我需要创建自己的 TraceListenerData,例如 Tavares solution 吗?
或者我是否需要了解和混淆 UnityDefaultBehaviorExtension,如 MacLeod 所详述?
现有代码错了吗?
或者解决方案在别处?
感谢您的专业知识。
【问题讨论】:
标签: c# logging dependency-injection enterprise-library