包装 log4net 以减少耦合是反模式吗?

发布于 2024-08-16 04:20:38 字数 67 浏览 8 评论 0原文

包装 log4net 以减少耦合是反模式吗?或者将记录器实例注入公共属性(反模式)?您如何处理 log4net 依赖项?

Is wrapping log4net to reduce coupling an antipattern? Or injecting the logger instance into a public property an antipattern? How do you approach the log4net dependency?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

无需解释 2024-08-23 04:20:38

出于以下原因包装记录器 -

  1. 它将更改仅隔离到记录器,将来如果您想将其更改为更好的内容,则无需级联更改。
  2. 当您想要编写测试用例时,它会让您的生活变得轻松。您可以轻松模拟所需的内容。
  3. 如果由于某些原因您需要在应用程序中拥有多个记录器,那么包装器会有所帮助。您可以通过某些工厂/注册表更改记录器。例如 - 如果代码在您想要使用不同记录器的不同平台/环境之间共享。您可以使其由工厂/注册表驱动。

所以,我的观点是很好地包装它。

Wrap a logger for below reasons -

  1. It isolates the change only to logger, in future if you want to change it to something better no cascaded changes.
  2. It makes your life easy when you want to write the test cases. You can easily mock the stuff required.
  3. If due to certain reasons you need to have more than one logger in your app, then wrapper helps. You can change the logger through some factory / registry. Ex - if a code is shared among different platforms/environments where you want to have different logger. You can make it factory/registry driven.

So, my view is good to wrap it.

沉默的熊 2024-08-23 04:20:38

服务定位器考虑 .NET 社区前沿的许多人都反对这种反模式。我想说,日志记录通常是我们应用程序的一个非常良性的功能。它本质上是“只写”的。我们永远不会根据日志系统的查询做出决策。

log4net也是一个很容易关闭的系统,不会抛出异常,默默地失败,可以动态更新其配置......一旦进入,几乎没有理由交换实现。

所以,我说,在应用程序中代码,直接使用就可以了。

The service locator is considered an anti-pattern by many on the leading edge of the .NET community. I would say that logging is usually a very benign feature of our applications. It's essentially "write-only". We are never making decisions based on queries of the logging system.

log4net is also a system that's easy to turn off, doesn't throw exceptions, silently fails, can update its configuration on the fly... there's almost no reason to swap out implementations once its in.

So, I say that, in application code, it's ok to use it directly.

谁对谁错谁最难过 2024-08-23 04:20:38

我们定义了一个日志记录接口,并有一个 log4net 实现、一个 unitTest 实现和一个 null 实现。

我们使用依赖注入来传递loggingInterface实现。

单元测试实现具有附加方法,例如“bool ErrorWasLogged()”,以便在我们的单元测试中我们可以断言已记录重要信息。对于我们对测试记录内容不感兴趣的测试,我们使用 null 实现。

We define a logging interface, and have a log4net implementation, a unitTest implementation and a null implementation.

We use dependency injection to pass a loggingInterface implementation around.

The unit test implementation has additional methods, like 'bool ErrorWasLogged()', so that in our unit tests we can assert that important information is logged. For tests where we are not interested in testing what was logged, we use the null implementation.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文