我有一个应用程序,我试图在其中将消息记录到 Application Insights。我对 Application Insights 和 Microsoft 日志记录框架比较陌生,所以我可能在这里弄错了一些术语,但我很高兴澄清是否有任何不清楚的地方。
我曾尝试按照此处的指南进行操作:https : //docs.microsoft.com/en-us/azure/azure-monitor/app/ilogger#aspnet-core-application 即只需在我的 Startup 类中的 IServiceCollection 上调用 AddApplicationInsightsTelemetry 方法然后在我的一个控制器中注入一个 ILogger 来尝试记录一条消息。
我没有尝试配置过滤器来设置最低严重性级别,所以我只是在做 _logger.LogWarning("My message") 因为默认情况下应该记录警告。
在点击我的控制器后,我检查了 Application Insights 中的跟踪,但在那里看不到我的消息。然而,我确实看到了遥测数据,例如,我可以看到请求正在记录我的应用程序。
然后我附加了一个调试器并逐步执行了我的控制器中的代码,并注意到我的 ILogger 不包含 ApplicationInsightsLogger。我还尝试注入 ILoggerFactory 并在其上调用 CreateLogger 方法,结果相同,即记录器不包含 ApplicationInsightsLogger。
这似乎表明,由于某种原因,ApplicationInsightsLoggerProvider 没有通过调用 AddApplicationInsightsTelemetry 注册,或者在添加 LoggerProviders 后有什么东西正在清除它,但我在 Startup 类中看不到任何似乎会这样做的东西。
我应该提到在同一个解决方案中有另一个项目,使用相同版本的 Microsoft.ApplicationInsights.AspNetCore (2.14.0),我在其中做同样的事情,但日志消息确实显示在 Application Insights 中。
完全不知道这里的问题是什么,或者我如何继续对其进行故障排除?
更新
我已经对此进行了更多的挖掘,问题肯定是由于某种原因,对 AddApplicationInsightsTelemetry("myInstrumentationKey") 的调用没有注册 ILoggerProvider。我尝试在 Startup.ConfigureServices 中执行以下操作:
services.AddApplicationInsightsTelemetry("myInstrumentationKey");
var sp = services.BuildServiceProvider();
var loggerFactory = sp.GetService<ILoggerFactory>();
Run Code Online (Sandbox Code Playgroud)
当我附加调试器并检查已解析的 loggerFactory 时,_providerRegistrations 属性为空。在同一个解决方案中的另一个项目中,我已经让它工作了这个属性包含一个 Microsoft.Extensions.Logging.ApplicationInsights.ApplicationInsightsLoggerProvider。在我看来,这排除了 Startup 稍后会清除注册提供程序的选项,它根本没有首先添加。
有没有人知道为什么这个调用应该无法注册 ApplicationInsightsLoggerProvider?无论如何我能找出为什么它没有这样做吗?我试过检查 Windows 事件日志,但看不到任何与此相关的错误或警告。 …