从文档和模板中看到多种获取Azure Functions 6中ILogger的方法,有什么区别?

See multiple ways to obtain ILogger in Azure Functions 6 from docs and templates, what are the differences?

我正在使用启用了 Application Insights 的 Azure Functions 6(.NET 6,独立)。

从不同版本的Visual Studio、Azure Functions Core Tools、微软默认模板等文档中展示了多种获取方式ILogger。我看过:

  1. ILoggerFactory 的构造函数注入(来自默认的 MS 模板):
private readonly ILogger _logger;

public MyFunction(ILoggerFactory loggerFactory)
{
    _logger = loggerFactory.CreateLogger<MyFunction>();
}
  1. FunctionContext(也从默认 MS 模板)获取它:
public async Task<HttpResponseData> Run([HttpTrigger(...)] HttpRequestData req, FunctionContext executionContext)
{
    var logger = executionContext.GetLogger("MyFunction);
}
  1. ILogger直接注入Run方法:
public static void Run(EventGridEvent eventGridEvent, ICollector<string> outputSbMsg, ILogger logger)

  1. 常规 ASP.NET 核心构造函数注入 ILogger<T>:
private readonly ILogger<MyFunction> _logger;

public MyFunction(ILogger<MyFunction> logger)
{
    _logger = logger;
}

所有这些方法有什么区别,哪些方法最好用?

4。 ILogger<T>:

的常规 ASP.NET 核心构造函数注入
private readonly ILogger<MyFunction> _logger;
public MyFunction(ILogger<MyFunction> logger)
{
    _logger = logger;
}
  • 这是在您的项目中使用 Logger 的最佳方式。
  • 在项目中使用 logger 取决于您的需要。
  • 通过上述方式,您可以在代码中的任何地方使用记录器。
  • 如果您使用的是较小的函数项目,您可以使用任何您想要的方法。但是当涉及到 Large function Projects 显然我们到处都在使用 multiple 类创建一个 logger 更复杂。因此,使用此构造函数,我们可以在任何我们想要的地方使用,只需调用构造函数来记录您的遥测数据。

3。将 ILogger 直接注入到 Run 方法中:

public static void Run(EventGridEvent eventGridEvent, ICollector<string> outputSbMsg, ILogger logger)

这样,我们就可以在特定的运行方法里面访问logger了。外层运行无法访问

2。从 FunctionContext(也从默认的 MS 模板)获取它:

public async Task<HttpResponseData> Run([HttpTrigger(...)] HttpRequestData req, FunctionContext executionContext)
{
    var logger = executionContext.GetLogger("MyFunction);
}

与第三点类似。但是第二个和第三个之间的区别是使用执行上下文。执行上下文包含函数信息所以我们可以在执行上下文中获取函数的详细信息。

1。 ILoggerFactory 的构造函数注入(来自默认的 MS 模板):

private readonly ILogger _logger;
public MyFunction(ILoggerFactory loggerFactory)
{
    _logger = loggerFactory.CreateLogger<MyFunction>();
}

这里 ILoggerFactory 汇集了 ILoggerProvider 的所有集合,并且 ILoggerFactory 为应用程序创建了 ILogger<T> 个实例。它包含 ILoggerILogger<T>ILoggerProviderILoggerFactory。所以使用这个我们可以使用 ILogger.

的所有用法

您可以使用 1st4th 方法,这是使用 ILogging[=68 的有效方法=].