加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

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

发布时间:2020-12-14 04:07:58 所属栏目:Windows 来源:网络整理
导读:根据 https://docs.microsoft.com/en-us/aspnet/core/fundamentals/logging,使用Microsoft.Extensions.Logging的建议方法似乎是通过依赖注入ILogger对象. 在依赖注入不起作用(或不能正常工作)的情况下建议的模式是什么,例如在扩展方法,类型初始值设定项,静态
根据 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实例作为参数传递.在许多情况下,必须传入记录器会严重限制扩展的有用性,因此您可能会完全没有登录.然而,即使你是学校认为扩展是好的和花花公子,大多数人会同意他们也应该在范围有限:即他们应该做一些简单的事情,不需要很多代码.如果是这种情况,实际登录的需求会急剧减少.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读