[英]How can I use the new DI to inject an ILogger into an Azure Function using IWebJobsStartup?
[英]Using Azure Function V3, how do I inject existing Ilogger into new class file?
我创建了一个新的 Azure Function,V3,CORE 3.1,使用 VS2019。 它使用一个基本的 HTTPTrigger。 我创建了一个新的 class 文件,并希望将现有的 Ilogger 注入其中。 如何做到这一点? 我是新手,所以任何帮助将不胜感激。
编辑:
所以终于想通了,把事情复杂化了。 V3 功能已经配置为使用 ILogger 进行日志记录,根据这篇文章,有一个错误会过滤掉使用不以 Function 开头的类别创建的任何日志: 无法使用通过 DI 提供的 ILogger 实例
我需要做的就是将记录器注入到 class 中,如下所示:
private readonly ILogger _logger;
public ClassName(ILogger<ClassName> logger)
{
_logger = logger;
}
然后就像这样称呼它:
_logger.LogInformation("Log Message");
我选择了上述帖子中的选项 1,并将命名空间添加到 host.json 文件中:
"logLevel": {
"NamespaceName": "Information"
}
我有一个 Function 将日志写入 App Insights,我使用 ILogger。
您可以在其他服务/帮助程序类中将 ILogger 与依赖注入一起使用。
public interface IExampleClass
{
void ExampleMethod();
}
public class ExampleClass : IExampleClass
{
private readonly ILogger<ExampleClass> _logger;
public ExampleClass(ILogger<ExampleClass> logger)
{
_logger = logger;
}
public void ExampleMethod()
{
_logger.LogInformation("Example info log");
}
}
我在启动文件中启用日志记录并注册 DI。
class Startup : FunctionsStartup
{
public override void Configure(IFunctionsHostBuilder builder)
{
builder.Services.AddLogging();
builder.Services.AddTransient<ExampleClass, IExampleClass>();
}
}
可以由主 class 调用。
public class ThisIsAnAzureFunction
{
private readonly IExampleClass _exampleClass;
public ThisIsAnAzureFunction(IExampleClass exampleClass)
{
_exampleClass = exampleClass;
}
[FunctionName("SomeAzureFunctionName")]
public async Task<IActionResult> Run([HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req, ILogger log)
{
try
{
//Try some stuff
}
catch (Exception exception)
{
//Log some stuff
log.LogError(exception);
throw;
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.