微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用Microsoft.Extensions.Logging从静态成员进行日志记录

根据 https://docs.microsoft.com/en-us/aspnet/core/fundamentals/logging,使用Microsoft.Extensions.Logging的建议方法似乎是通过依赖注入ILogger对象.

在依赖注入不起作用(或不能正常工作)的情况下建议的模式是什么,例如在扩展方法,类型初始值设定项,静态属性和其他静态成员中,传递ILogger会非常麻烦?

使用log4net(我的团队之前使用过),一个常见的模式是:

public static class SomeExtensions
{
  private static readonly ILog s_log = LogManager.GetLogger(typeof(SomeExtensions));

  public static void ExtensionMethod (this SomeType someType)
  {
    s_log.Info("...");
  }
}

Microsoft.Extensions.Logging是否有类似的既定或推荐模式?

DI对于静力学并不好玩.从某种意义上说,它们是一种对立的设计哲学. ASP.NET大量使用静态(HttpContext,任何人?),并且在很多方面使用依赖注入非常困难. ASP.NET Core选择避开静态并使用100%DI模型.

简而言之,如果你想使用依赖注入,你的静态使用应该消失.在大多数情况下,这实际上是一件非常好的事情.虽然它们可以用于某些事情,但在大多数情况下都会被滥用.你可以用静态做很多事情,你不能用单例范围内的依赖注入类来做,后者为你提供了更大的抽象和可重用性.

无法真正替换的静态的一种用法是扩展.当然,有一整套思想认为你不应该使用扩展,无论如何.但是,如果您需要或想要扩展,那么您要么无法从这些扩展,要么您必须将logger实例作为参数传递.在许多情况下,必须传入记录器会严重限制扩展的有用性,因此您可能会完全没有登录.然而,即使你是学校认为扩展是好的和花花公子,大多数人会同意他们也应该在范围有限:即他们应该做一些简单的事情,不需要很多代码.如果是这种情况,实际登录的需求会急剧减少.

简而言之,它简单归结为您必须做出的设计决策.如果你想要依赖注射路线,静力学将是你家的瘟疫,你应该避免它们.

原文地址:https://www.jb51.cc/windows/365238.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐