【问题标题】:ILogger not Injected in Durable Functions v2.0ILogger 未注入 Durable Functions v2.0
【发布时间】:2020-03-04 05:55:42
【问题描述】:

目前我正在尝试将 ILoggerILogger<> 添加到 Azure 持久函数,以便在 Activity Functions 中使用日志记录。

在编排函数中登录工作正常,并被注入方法本身,但尝试为 ILogger 注入构造函数总是会导致 Null 异常。

builder.Services.AddLogging();

当添加到启动文件(引导程序)时,上述内容似乎不起作用,以下变化也不起作用:

builder.Services.AddSingleton(typeof(ILogger<>), typeof(Logger<>));

有人解决了吗?

【问题讨论】:

  • 您是否尝试将记录器注入到不同的类中?
  • 我确实有@chris。我认为这是 Activity 函数的限制,可能需要使用元组或其他方式传入日志记录。

标签: c# logging dependency-injection azure-functions azure-durable-functions


【解决方案1】:

从您的启动文件中删除以下任一行:

builder.Services.AddLogging();
builder.Services.AddSingleton(typeof(ILogger<>), typeof(Logger<>));

然后,无论您在哪里注入 ILogger,请使用 ILogger&lt;T&gt; 添加正在注入您的记录器的 type,即:

public class Function1
{
    private readonly ILogger _logger;

    public Function1(ILogger<Function1> logger)
    {
        _logger = logger;
    }

    [FunctionName("Function1")]
    public async Task<IActionResult> Run(
        [HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req)
    {
        _logger.LogInformation("C# HTTP trigger function processed a request.");

        string name = req.Query["name"];

        string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
        dynamic data = JsonConvert.DeserializeObject(requestBody);
        name = name ?? data?.name;

        return name != null
            ? (ActionResult)new OkObjectResult($"Hello, {name}")
            : new BadRequestObjectResult("Please pass a name on the query string or in the request body");
    }
}

【讨论】:

  • 我相信默认情况下会添加日志记录,因此您关于删除注册的第一个建议是准确的。
  • 感谢您的回复@chris,但这不起作用,我已经尝试过。请记住,这是 Durable Functions,而不是无状态 Azure Functions。
  • @BillyRayValentine 你有没有找到解决办法?
  • 我没有,最后 ILogger 是在函数中传递的,而不是构造函数,这并不理想,但仍然是框架引导的正确记录器。
猜你喜欢
  • 2020-07-16
  • 2020-12-03
  • 2021-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-18
  • 1970-01-01
  • 2020-08-25
相关资源
最近更新 更多