如何解决如果在Azure函数C#中使用DependencyInjection,则ILogger不会写入ApplicationInsight
我对Azure函数使用DI模式,因此,我创建了如下启动文件:
[assembly: Functionsstartup(typeof(MyNamespace.Startup))]
namespace MyNamespace
{
public sealed class Startup : Functionsstartup
{
public override void Configure(IFunctionsHostBuilder builder)
{
builder.Services.AddLogging();
builder.Services.AddTransient<IMyManager,Mymanager>();
...
}
}
}
和Azure函数:
public sealed class MyFunc
{
public MyFunc(IMyManager manager)
{
_myManager = manager;
}
[FunctionName("MyFunc")]
public async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Anonymous,"post",Route = null)] HttpRequest req,ILogger log,ExecutionContext context)
{
log.Loginformation("this is a test"); // this log appear in Application Insights
...
}
和MyManager:
public sealed class MyManager: IMyManager
{
public MyManager(ILogger<MyManager> log)
{
_log = log;
}
public async Task ExecuteAsync(...)
{
_log.Loginformation("Execute MyManager"); // this log does not appear in app insights
}
}
似乎ILogger或任何注入的记录器未反映在Application Insights中。我应该在host.json文件中定义它吗?
我认为应该不做任何改动就可以使用。
解决方法
如documentation provided by Microsoft中所述,您必须配置host.json:
“ host.json文件配置决定了应用程序发送到Application Insights的日志记录数量。”
您至少应记录enable the critical level。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。