首页 > 解决方案 > 在 azure 函数中注入自定义类记录器不会写入控制台

问题描述

我有 Azure 函数 V2(IotHub 触发器)。如果我将 ILogger 用于 Main 触发函数,则 log.Debug() 输出完美:

[FunctionName("MainFunc")]
public async Task Run([IoTHubTrigger("messages/events", Connection = "IotHubCompatibleEndpointConnectionString", ConsumerGroup = "iothub_trigger_sqldb_cg")]
    EventData eventData,
    ILogger log)
{

    log.LogDebug("it outputs!"); // works perfectly

我想要做的是将记录器注入我的自定义服务:

public class Startup : IWebJobsStartup
{
    public void Configure(IWebJobsBuilder builder)
    {
        builder.Services.AddScoped<ITelemetryProcessor, TelemetryProcessor>();
        builder.Services.AddScoped<INotificationSender, NotificationSender>();
        builder.Services.AddLogging();
    }
}

在服务构造函数中,我尝试以两种方式将日志写入输出控制台

public TelemetryProcessor(INotificationSender notificationSender, ILogger<ITelemetryProcessor> log, ILoggerFactory loggerFactory)
{
    _notificationSender = notificationSender;
    _log = loggerFactory.CreateLogger("common");
    _log.LogDebug("write something"); // doesn't output
    log.LogDebug("write something v2"); // doesn't output as well
 ....
}

标签: c#azureazure-functions

解决方案


应在 host.json 中设置日志记录添加日志记录部分后,注入的日志(两者)开始工作

例如像这样:

{
  "version": "2.0",
  "logging": {
    "fileLoggingMode": "debugOnly",
    "logLevel": {
      // For all functions
      "Function": "Trace",
      // Default settings, e.g. for host
      "default": "Trace"
    }
  }
}

更多关于配置可以在这里找到


推荐阅读