【问题标题】:How can I use ILogger<T> from an Azure Functions V2 function?如何从 Azure Functions V2 函数使用 ILogger<T>?
【发布时间】:2019-05-21 03:32:48
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 您可以使用 log4net 进行日志记录

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


【解决方案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>();
    }        
}

【讨论】:

  • 谢谢。你只是把它放在你的函数项目中的某个地方吗?它如何与职能团队现有的其他默认选项一起使用?它会破坏这些配置吗?
  • 我只是将启动文件放在我的函数所在的项目中。如果其他功能仍然是静态的并且不一定从注入中受益,我不确定它的行为方式。我想,让 Function App 中的所有功能都遵循类似的方法可能被认为是一种好习惯……你怎么看?
  • 是的,我认为您可能希望他们在函数应用程序中遵循类似的方法。我主要担心的是,我怀疑函数团队有一个 IWebJobsStartup 接口的实现,该接口正在被运行时使用并且覆盖可能会删除他们的一些配置。
猜你喜欢
  • 2020-09-13
  • 2020-07-16
  • 2019-02-26
  • 2019-08-27
  • 2019-03-05
  • 2020-12-03
  • 1970-01-01
  • 1970-01-01
  • 2019-03-26
相关资源
最近更新 更多