我最近一直在考虑在整个应用程序中抽象我的日志记录。另一个资源上的更具体的帖子导致了“公共基础设施库”的推荐:
http://netcommon.sourceforge.net/
具体来说,Common.Logging 类,它提供了一个通用接口,可以位于许多日志记录实现(例如 log4net)的前面。
不过,我有点不愿意在我的项目中引入另一个 3rd 方代码。
有人用过这个库吗?我很想听听你的经历。
谢谢
我最近一直在考虑在整个应用程序中抽象我的日志记录。另一个资源上的更具体的帖子导致了“公共基础设施库”的推荐:
http://netcommon.sourceforge.net/
具体来说,Common.Logging 类,它提供了一个通用接口,可以位于许多日志记录实现(例如 log4net)的前面。
不过,我有点不愿意在我的项目中引入另一个 3rd 方代码。
有人用过这个库吗?我很想听听你的经历。
谢谢
我在 log4net 中使用了 Common Infrastructure Library,它运行良好。我使用它而不仅仅是 log4net,因为我的客户表示希望保持开放使用 Microsoft 的企业库 (EntLib) 日志记录的可能性。
我不知道为什么 Brad Bruce 建议不要使用这个抽象层——它使用起来很简单,也没有造成任何问题。IMO log4net 领先于任何其他可用的东西,但有些人想要 EntLib 只是因为它上面有微软印章的额外舒适因素。通过使用抽象层,我让我的客户可以自由地切换到 EntLib,而无需更改代码或重新编译 - 只需更改配置文件。
你会在提到的日志项目之间切换吗?
您是否将源代码分发给可能正在使用列出的日志记录项目之一的人,而您没有使用?
再次; 如果您不打算切换库,我不会使用 Common.Logging 类。
作为一个快速跟进......我今天正在记录日志,并决定尝试让 Chainsaw 工作,这样我就可以实时查看我的应用程序的日志。但是,我无法让 UdpReceiver 在 Chainsaw 中工作。
解决方案是忘记 Chainsaw 并启用 NLog(通过 Common.Logging 配置设置)并改用 NLogViewer。NLog 和 NLogViewer 像宣传的那样一起工作,我现在可以在日志发生时查看它们。我能够将 NLog 合并到我的应用程序中,而无需修改我的代码库。包含 Common.Logging 抽象的回报比我预期的要快得多。
当我开始在我的 MVC 应用程序中使用 log4net 时,我开始担心我的控制器类与具体的 log4net 实现的紧密耦合。确实,提交 Common.Logging 中定义的特定接口(顺便反映了 log4net 的接口)就是这样;一个承诺。但是 Common.Logging 的 2.0 版本给了我一个直接的抽象层次,它模仿的 log4net 接口经过了实战测试并且易于使用。此外,我喜欢通过简单地添加引用和更新 Web.config 文件来使用、测试和试验不同的具体日志记录实现的想法。
布鲁斯的所有观点都是完全正确的。这种抽象可能只不过是一种虚假的安全感,而这个决定最终可能会咬到我的屁股。尽管如此,有时您只需要在最佳实践方面犯错,直到出现最佳实践。:-)