首页 > 解决方案 > 如何使用 ILogger来自 Azure Functions V2 函数?

问题描述

我有一些最初设计为从我的 ASP.NET Core 2.1 Web 应用程序调用的服务。他们使用 Microsoft.Extensions.DependencyInjection 包的东西将依赖项注入到他们的构造函数中。其中一些依赖于 ILogger 记录器。

public GroupService(ILogger<GroupService> logger)
{
    ...
}

我正在函数中构建一个服务提供程序,以便它们仍然可以按预期工作,但是我想知道我应该如何处理记录器依赖项。默认情况下,Azure 函数 (V2) 会在其中注入一个 ILogger,但不能在 DI 容器中使用它来创建服务所需的其他记录器。

是否有一个 LoggerFactory 在“秘密”的某个地方注册,我可以访问它以在我的 DI 容器中使用?我认为这将允许我添加额外的记录器来记录到函数输出窗口,还是我完全误解了一个函数的记录是如何工作的?

我是否只需要设置一个新的 LoggerFactory 并将该日志记录到函数项目使用的 ApplicationInsights 实例中?

标签: c#.net-coreazure-functions

解决方案


使用最新的 Azure 函数运行时,您现在可以让运行时通过构造函数注入您的依赖项。

您现在可以从 Azure 函数中删除静态关键字并拥有运行时。

以下是您可以设置的方法:

[assembly: WebJobsStartup(typeof(StartUp))]

public class StartUp : IWebJobsStartup
{
    public void Configure(IWebJobsBuilder webJobsBuilder)
    {
        // Enables logging and sets the minimum level of logs.
        webJobsBuilder.Services.AddLogging(loggingBuilder =>
        {
            loggingBuilder.SetMinimumLevel(LogLevel.Debug);
        });

        // Registers your services.
        webJobsBuilder.Services.AddTransient<IGroupService, GroupService>();
    }        
}

推荐阅读