2

我最近一直在考虑在整个应用程序中抽象我的日志记录。另一个资源上的更具体的帖子导致了“公共基础设施库”的推荐:

http://netcommon.sourceforge.net/

具体来说,Common.Logging 类,它提供了一个通用接口,可以位于许多日志记录实现(例如 log4net)的前面。

不过,我有点不愿意在我的项目中引入另一个 3rd 方代码。

有人用过这个库吗?我很想听听你的经历。

谢谢

4

4 回答 4

4

我在 log4net 中使用了 Common Infrastructure Library,它运行良好。我使用它而不仅仅是 log4net,因为我的客户表示希望保持开放使用 Microsoft 的企业库 (EntLib) 日志记录的可能性。

我不知道为什么 Brad Bruce 建议不要使用这个抽象层——它使用起来很简单,也没有造成任何问题。IMO log4net 领先于任何其他可用的东西,但有些人想要 EntLib 只是因为它上面有微软印章的额外舒适因素。通过使用抽象层,我让我的客户可以自由地切换到 EntLib,而无需更改代码或重新编译 - 只需更改配置文件。

于 2009-08-18T11:23:43.500 回答
1

你会在提到的日志项目之间切换吗?

您是否将源代码分发给可能正在使用列出的日志记录项目之一的人,而您没有使用?

  1. 日志记录项目比 Common.Logging 支持的项目多得多
  2. 这似乎很像 ODBC 多年前所做的。它以可互换的形式出售,但一旦您使用一个提供商特定的功能,您就无法再切换。
  3. 当日志记录出现问题时,您现在有 2 层要调试。

再次; 如果您不打算切换库,我不会使用 Common.Logging 类。

于 2009-08-18T10:55:08.970 回答
1

作为一个快速跟进......我今天正在记录日志,并决定尝试让 Chainsaw 工作,这样我就可以实时查看我的应用程序的日志。但是,我无法让 UdpReceiver 在 Chainsaw 中工作。

解决方案是忘记 Chainsaw 并启用 NLog(通过 Common.Logging 配置设置)并改用 NLogViewer。NLog 和 NLogViewer 像宣传的那样一起工作,我现在可以在日志发生时查看它们。我能够将 NLog 合并到我的应用程序中,而无需修改我的代码库。包含 Common.Logging 抽象的回报比我预期的要快得多。

于 2009-12-20T04:12:09.730 回答
0

当我开始在我的 MVC 应用程序中使用 log4net 时,我开始担心我的控制器类与具体的 log4net 实现的紧密耦合。确实,提交 Common.Logging 中定义的特定接口(顺便反映了 log4net 的接口)就是这样;一个承诺。但是 Common.Logging 的 2.0 版本给了我一个直接的抽象层次,它模仿的 log4net 接口经过了实战测试并且易于使用。此外,我喜欢通过简单地添加引用和更新 Web.config 文件来使用、测试和试验不同的具体日志记录实现的想法。

布鲁斯的所有观点都是完全正确的。这种抽象可能只不过是一种虚假的安全感,而这个决定最终可能会咬到我的屁股。尽管如此,有时您只需要在最佳实践方面犯错,直到出现最佳实践。:-)

于 2009-12-19T21:33:23.277 回答