Common.Logging与多个工厂适配器

omo*_*ler 6 .net common.logging

我目前正致力于将一个大型项目移动到使用Common.Logging,我希望能够将记录事件输出到多个第三方日志记录实现.

我们目前有一个内部开发的跟踪库,我们希望继续使用它来跟踪和调试消息.我还想开始使用log4net将一些消息发送到数据库,以便在某些级别进行报告或发送电子邮件通知.

我正在寻找的是这样的:

<common>
<logging>
  <factoryAdapter type="CustomTraceFactoryAdapter, MyAssembly">
    <arg key="configType" value="INLINE"/>
  </factoryAdapter>
  <factoryAdapter type="Common.Logging.Log4Net.Log4NetLoggerFactoryAdapter, Common.Logging.Log4Net">
    <arg key="configType" value="INLINE"/>
  </factoryAdapter>
</logging>
</common>
Run Code Online (Sandbox Code Playgroud)

使用开箱即用的配置选项有没有办法做到这一点?

Bre*_*den 5

AFAIK,Common.Logging中没有任何内容可以满足您的需求.这里有几个选择.

1)开发一些自定义记录器工厂适配器,如http://netcommon.sourceforge.net/docs/2.1.0/reference/html/ch01.html#logging-advanced-customfactoryadapter中所述.您已经开发的一个自定义工厂将用于您的内部跟踪库.第二个自定义工厂将通过组合来自一个或多个其他工厂的记录器来创建复合记录器对象.

2)为您的跟踪库开发自定义log4net appender(http://logging.apache.org/log4net/release/faq.html#custom-appender),并将Common.Logging配置为仅使用log4net工厂.

我觉得第二个选项最简单,因为它不会涉及更改Common.Logging的配置行为,因此它可以构成来自其他已配置工厂的复合工厂.


msh*_*dal 5

现在有一种内置方法可以支持多个适配器,请查看Common.Logging.MultipleLogger这里有一个示例App.config展示了如何使用它。