【问题标题】:Are there any alternatives to Common.Logging? [closed]Common.Logging 有什么替代品吗? [关闭]
【发布时间】:2011-07-21 15:03:53
【问题描述】:

编辑:Common.Logging 2.1.1 于 2012 年 6 月 9 日发布,Github page 相当活跃,author commenting specifically on the health of the project

我们正在考虑在一个新的 .NET 项目中使用 Common.Logging,但我有点担心该项目似乎已变得不活跃。 homepage 最后一次更新是在 2009 年,latest version available on SourceForge 是在 2010 年创建的。我已经找到了一个 incompatibility with NLog 2,我担心随着时间的推移这可能会成为一个更大的问题。我注意到 Enterprise Library 5.0 没有被列为兼容但我没有尝试过。

是否有其他替代方案可以提供类似的通用接口?

【问题讨论】:

  • 不活跃可能意味着它的稳定和成熟。
  • @Kugel 是的,尽管当它被设计为与具有更活跃发布计划的其他库交互时需要一定数量的活动。
  • 我也很想知道是否还有其他选择。开发人员似乎太忙了,只能查看邮件列表中的最后几篇文章,这很遗憾,因为 common.logging 在很多地方都使用过。话虽如此,他们最近确实推出了一个 nuget 包。
  • SimpleLoggingFacade (SLF) 是一种替代方案:slf.codeplex.com
  • 你应该试试 ReflectInsight。它支持 Common.Logging 支持的所有扩展以及 Common.Logging 本身。 insightextensions.codeplex.com 免责声明:我是 ReflectInsight 的开发者之一。

标签: .net logging nlog common.logging


【解决方案1】:

我已经使用 Common.Logging 四年了,我可以将它与 NLog2 一起使用。要彻底回答您的问题,我们需要先仔细查看 Common.Logging。 Common.Logging 为您带来两个好处:

  1. 从 1.x 开始,Common.Logging 允许您编写独立于日志框架的应用程序。因此,您可以轻松地从一个日志记录框架更改为另一个,甚至无需重新编译您的应用程序。这对于开发通用库特别有用,可以被使用不同日志框架的各种应用程序使用。

  2. 从 2.x 开始,Common.Logging 允许您聚合来自各种日志框架的日志信息。假设我们正在开发一个应用程序并且想要利用两个第 3 部分库,比如 A3rd.dll 和 B3rd.dll。 A3rd.dll 使用 log4net,但 B3rd.dll 使用 NLog。现在如何将 A3rd.dll 和 B3rd.dll 的日志信息整合到一个日志文件(或日志监控系统)中? Common.Logging 可以提供帮助,例如它可以从 NLog 捕获日志消息并将其发送到 log4net,然后让 log4net 将其写入日志文件或将其发送到 log4net 可以做的任何地方。

现在,回到 NLog2。 NLog2 中的日志记录 API 向后兼容 NLog1,但配置和目标的 API 发生了变化。因此,如果您只需要将日志消息发送到 NLog2,您可以简单地进行程序集重定向(请参阅我的答案:Can NLog v2 be used with Common.Logging)。

话虽如此,如果您想使用 Common.Logging 将 NLog2 消息聚合到其他日志框架,则程序集重定向方法将不起作用。必须创建一个 NLog2 特定的适配器。

就像@Kugel 所说,不活跃可能意味着稳定和成熟。由于 Common.Logging 与各种日志框架一起工作,因此不太可能在每次受支持的日志框架发布时发布新版本。否则,它可能比帮助更混乱。因此,应始终首先考虑程序集重定向。仅当确实出现不兼容问题时,例如我提到的 NLog2 消息重定向,向邮件列表发送电子邮件,我相信有人会介入并提供帮助。

干杯, 肯尼斯

【讨论】:

  • 感谢非常有用的东西,尤其是程序集重定向。我仍然认为,如果 Common.Logging 团队想让人们使用他们的项目,那么至少对网站进行一些更新可能是好的——例如记录程序集重定向。仅仅因为代码是稳定不变的,并不意味着网站也应该是静态的。
【解决方案2】:

bclcontrib-abstract 项目的这个区域似乎正在发生一些事情:

http://code.google.com/p/bclcontrib-abstract/source/browse/Contoso.Abstract.NLog/Abstract/NLogServiceLog.cs

尝试了 BclContrib-Abstract.NLog 0.1.5 NuGet 包后,我不喜欢它位于 Contoso 命名空间 (Contoso.Abstract.NLog) 下的方式。

【讨论】:

    【解决方案3】:

    如果我想使用不受支持的库(例如 NLog2),看起来一种选择是实现自定义 FactoryAdapter。我不确定这会有多困难,但它可能是一种选择:

    如果你想插入一个新的但不受支持的日志库,你 需要提供一个记录器工厂适配器来实现 Common.Logging.ILoggerFactoryAdapter 接口。记录器必须实现 Common.Logging.ILog 接口。

    来源:http://netcommon.sourceforge.net/docs/2.0.0/reference/html/ch01.html#logging-advanced-customfactoryadapter

    更新:

    这是我第一次尝试实现 NLog 2,使用风险自负。欢迎任何 cmets:

    https://gist.github.com/1107148

    【讨论】:

    • 我已经成功实现了这一点,并希望能尽快实现。
    猜你喜欢
    • 2010-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多