如何通过Azure Functions V2函数使用ILogger <t>?

时间:2018-12-20 15:30:12

标签: c# .net-core azure-functions

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

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

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

是否有一个LoggerFactory在“隐蔽的”地方注册,我可以在DI容器中使用它?我认为这将使我可以添加其他记录到功能输出窗口的记录器,还是我完全误解了登录功能的工作原理?

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

1 个答案:

答案 0 :(得分:1)

现在使用most recent Azure Function runtime,可以使运行时通过构造函数注入依赖项。

您现在可以从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>();
    }        
}