为以下原因包装记录器 - 它仅将更改隔离到记录器中,如果将来要将其更改为更好的东西,则没有级联更改。 当您想编写测试用例时,它会让您的生活变得轻松。您可以轻松地模拟所需的内容。 如果由于某种原因您需要在应用程序中拥有多个记录器,那么包装器可以帮助您。您可以通过某些工厂/注册表更改记录器。例如 - 如果代码在不同的平台/环境之间共享,其中您想要具有不同的记录器。您可以使其工厂/注册表驱动。 因此,我的观点是将其包装起来很好。
在.NET社区的许多领先者眼中,服务定位器 被认为 是一种反模式。我认为日志通常是应用程序中非常基本的功能之一。它本质上是“只写”的。我们从来不会根据查询日志系统做出决策。 log4net也是一个易于关闭、不会引发异常、悄悄失败并可以在运行时更新其配置的系统……几乎没有理由在接入后更换实现。 所以,在应用程序代码中,直接使用它是可以的。
我们定义了一个日志接口,并有log4net实现、unitTest实现和null实现。我们使用依赖注入来传递loggingInterface实现。 unitTest实现有额外的方法,比如'bool ErrorWasLogged()',这样在我们的单元测试中,我们可以断言重要信息是否被记录。对于我们不感兴趣测试记录内容的测试,我们使用null实现。