Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 注入azure函数中的自定义类记录器不会写入控制台_C#_Azure_Azure Functions - Fatal编程技术网

C# 注入azure函数中的自定义类记录器不会写入控制台

C# 注入azure函数中的自定义类记录器不会写入控制台,c#,azure,azure-functions,C#,Azure,Azure Functions,我有Azure功能V2(IotHub触发器)。如果我在主触发器函数中使用ILogger,则log.Debug()输出完美: [FunctionName("MainFunc")] public async Task Run([IoTHubTrigger("messages/events", Connection = "IotHubCompatibleEndpointConnectionString", ConsumerGroup = "iothub_trigger_sqldb_cg")]

我有Azure功能V2(IotHub触发器)。如果我在主触发器函数中使用ILogger,则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
我想做的是将logger注入到我的自定义服务中:

public class Startup : IWebJobsStartup
{
    public void Configure(IWebJobsBuilder builder)
    {
        builder.Services.AddScoped<ITelemetryProcessor, TelemetryProcessor>();
        builder.Services.AddScoped<INotificationSender, NotificationSender>();
        builder.Services.AddLogging();
    }
}
公共类启动:IWebJobsStartup
{
公共void配置(IWebJobsBuilder生成器)
{
builder.Services.addScope();
builder.Services.addScope();
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
 ....
}
公共遥测处理器(INotificationSender notificationSender、ILogger日志、ILogger工厂日志)
{
_notificationSender=notificationSender;
_log=loggerFactory.CreateLogger(“公共”);
_log.LogDebug(“写东西”);//不输出
LogDebug(“write something v2”);//也不输出
....
}

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

例如:

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

有关配置的更多信息,请参见

您是否指定了
[assembly:WebJobsStartup(typeof(Startup))]
属性

下面是一个完整的工作示例

    private IServiceCollection ConfigureServices(IServiceCollection services)
    {
        services
            .AddLogging(loggingBuilder =>
                loggingBuilder.AddSerilog(
                    new LoggerConfiguration()
                        .WriteTo.DatadogLogs(
                            apiKey: "REPLACE - DataDog API Key",
                            host: Environment.MachineName,
                            source: "REPLACE - Log-Source",
                            service: GetServiceName(),
                            configuration: new DatadogConfiguration(),
                            logLevel: LogEventLevel.Infomation
                        )
                        .CreateLogger())
            );

        return services;
    }