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

Fab*_*ied 12 logging asp.net-core

根据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("...");
  }
}
Run Code Online (Sandbox Code Playgroud)

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

Fab*_*ied 6

感谢 @chris-pratt 和 @shad指出ASP.NET Core 记录器方法不能很好地处理静态以及实际查找相关文档

然而,在某些情况下,避免静力学是困难的或(主观上)不可取的。所以我的问题的重点是问Microsoft.Extensions.Logging在这种情况下是否有任何既定的模式来处理。

该问题的唯一真正答案是@alexandre-pires的评论,他将我指向了这篇 Stackify 文章。除此之外,它展示了如何设置一个ILoggerFactory可以从静态上下文中使用的集中式。但是,它的结论是继续使用 NLog 或 Serilog 并转发Microsoft.Extensions.Logging到该库。