在 global.asax.cs 中分配后未填充 Insights InstrumentationKey
Posted
技术标签:
【中文标题】在 global.asax.cs 中分配后未填充 Insights InstrumentationKey【英文标题】:Insights InstrumentationKey not populated after assignment in global.asax.cs 【发布时间】:2021-10-14 19:31:47 【问题描述】:我有一个使用这些 Nuget 包的.NET Framework 4.6.1
Web API 解决方案:
<package id="Microsoft.ApplicationInsights" version="2.9.1" targetFramework="net461" />
<package id="Microsoft.ApplicationInsights.Agent.Intercept" version="2.4.0" targetFramework="net461" />
<package id="Microsoft.ApplicationInsights.DependencyCollector" version="2.9.1" targetFramework="net461" />
<package id="Microsoft.ApplicationInsights.PerfCounterCollector" version="2.9.1" targetFramework="net461" />
<package id="Microsoft.ApplicationInsights.Web" version="2.9.1" targetFramework="net461" />
<package id="Microsoft.ApplicationInsights.WindowsServer" version="2.9.1" targetFramework="net461" />
<package id="Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel" version="2.9.1" targetFramework="net461" />
<package id="Microsoft.AspNet.TelemetryCorrelation" version="1.0.5" targetFramework="net461" />
在global.asax.cs
我有这个代码:
protected void Application_Start()
TelemetryConfiguration.Active.InstrumentationKey = ConfigurationManager.AppSettings[$"Insights-EnvironmentConfig.EnvironmentName"];
GlobalConfiguration.Configure(WebApiConfig.Register);
我可以确认 ConfigurationManager.AppSettings[]
值检索确实检索到有效的 Insights 键。
在我拥有的控制器中:
public class MyController : ApiController
TelemetryClient telemetryClient = new TelemetryClient(TelemetryConfiguration.Active);
[Route("api/DoSomething")]
[HttpPost]
public async Task<HttpResponseMessage> DoSomething()
try
// stuff happens
catch (Exception ex)
telemetryClient.TrackException(ex); // does not log
throw ex;
如果我在// stuff happens
设置一个停止点(当然那里有实际代码)并检查telemetryClient
我可以看到InstrumentationKey
属性为空。这意味着我需要在实例化 TelemetryClient
类的任何地方添加一行并故意填充它。
我怎样才能让它从global.asax.cs
开始填充?
【问题讨论】:
【参考方案1】:尝试同时使用 appsetting 属性 ConfigurationManager.AppSettings
和 WebConfigurationManager.AppSettings
我能够在 Application Insights
上查看 TelemetryConfiguration
和 日志 中的 Instrumentation 密钥。
我们正在TelemetryConfig
中添加我们的检测密钥,该密钥在Telemetryconfig.
中可用
protected void Application_Start()
TelemetryConfiguration.Active.InstrumentationKey = ConfigurationManager.AppSettings[$"Insights-EnvironmentConfig.EnvironmentName"];
//TelemetryConfiguration.Active.InstrumentationKey = WebConfigurationManager.AppSettings[$"Insights-EnvironmentConfig.EnvironmentName"];
GlobalConfiguration.Configure(WebApiConfig.Register);
【讨论】:
以上是关于在 global.asax.cs 中分配后未填充 Insights InstrumentationKey的主要内容,如果未能解决你的问题,请参考以下文章
为啥 Global.asax.cs 中的 Session_Start 会导致性能问题?
MVC 应用程序 - 从 Global.asax.cs 检索 LoaderExceptions
Global.asax.cs 为 /.aspx 执行子请求时出错。 Server.Transfer
为啥我在 Global.asax.cs 中的 Application_BeginRequest 没有被自托管的 WCF 服务调用
ASP.NET MVC:如何在 Global.asax.cs 中的 Application_Start() 中检测浏览器宽度