在debugging中禁用应用程序见解

如何在使用debuggingconfiguration时自动禁用应用程序见解并仅在发布时启用它?
有没有可能做到这一点,而不只是为了debugging创build另一个仪器钥匙?

我将trackevent的代码散布在整个代码中,将它们包含在debugging预处理程序中不是一个理想的解决scheme。

我目前的解决scheme是将ApplicationInsights.config文件的Build Action设置为None以便它不复制到项目的输出目录,但这不是一个可以基于活动生成configuration自动执行的过程。

有一个开发人员模式,但需要手动更改(如果可以有条件地设置configuration文件,清空instrumentationkey解决问题以及)。 请参阅http://apmtips.com/blog/2015/02/02/developer-mode/

参考: http : //blogs.msdn.com/b/visualstudioalm/archive/2015/01/07/application-insights-support-for-multiple-environments-stamps-and-app-versions.aspx

你可以尝试使用TelemetryConfiguration.DisableTelemetry属性像这样的东西..

 #if DEBUG TelemetryConfiguration.Active.DisableTelemetry = true; #endif 

除了其他的解决scheme,我build议添加以下让我们说到Global.asax

 protected void Application_Start() { DisableApplicationInsightsOnDebug(); // do the other stuff } /// <summary> /// Disables the application insights locally. /// </summary> [Conditional("DEBUG")] private static void DisableApplicationInsightsOnDebug() { TelemetryConfiguration.Active.DisableTelemetry = true; } 

这样做的好处是,它不需要修改configuration,而且对于像ReSharper这样的工具来说效果会更好,它比# -directives更能理解它。

如问题中所述,如果不部署或部署ApplicationInsights.config,而没有生成<instrumentationkey>key</instrumentationkey>块事件。 然后你可以把检测密钥放在代码中(只有在我的情况下才能发布)

 #if !DEBUG Microsoft.ApplicationInsights.Extensibility.TelemetryConfiguration.Active.InstrumentationKey = "instrumentation key"; #endif 

在这次调用之后创build的每个TelemetryClient都将具有正确的密钥并将跟踪事件,因此您不必在所有地方更改代码。 不调用上述方法或将参数留空将阻塞事件,因为没有configuration密钥。

基本上, ApplicationInsights.config文件将覆盖任何设置检测密钥的代码,删除其中的<instrumentationkey>key</instrumentationkey>将允许您使用代码来configuration密钥。 如果完全删除该文件,则不起作用。

这里是确认:“如果你想dynamic地设置密钥 – 例如,如果你想从你的应用程序发送结果到不同的资源 – 你可以省略configuration文件中的密钥,并将其设置为代码。”

参考: https : //azure.microsoft.com/en-us/documentation/articles/app-insights-configuration-with-applicationinsights-config/#_instrumentationkey

我决定使用这两种方法。 我已经将InstrumentationKey移到了Web.Config,它将被来自Web.Release.Config或Web.Debug.Config的转换所取代。 (不要忘记从ApplicationInsights.config文件中删除它)。 然后我从Application_Start()调用这个方法

 public static void RegisterTelemetryInstrumentationKey() { if (string.IsNullOrWhiteSpace(WebConfigurationManager.AppSettings["TelemetryInstrumentationKey"]) { TelemetryConfiguration.Active.DisableTelemetry = true; } else { TelemetryConfiguration.Active.InstrumentationKey = AppSettings.TelemetryInstrumentationKey; } } 

我刚刚有同样的问题。

我们想要控制web.config中的设置,所以在我们的应用程序设置中添加了一个DisableAITelemetry项:

  <appSettings> <add key="DisableAITelemetry" value="true" /> </appSettings> 

通过实时和演示版本,我们不会包含一个值(所以它默认为false)。

然后我们可以通过添加这个来解决它:

 bool disable; string disableAiTelemetry = ConfigurationManager.AppSettings["DisableAITelemetry"]; bool.TryParse(disableAiTelemetry, out disable); TelemetryConfiguration.Active.DisableTelemetry = disable; 

在ASP.NET Core应用程序中,可以将以下内容添加到Startus.cs中,以在开发环境中closuresApplication Insights:

 if (env.IsDevelopment()) { TelemetryConfiguration.Active.DisableTelemetry = true; } 

把这个添加到构造函数中,在builder.AddApplicationInsightsSettings(); 命令,你将不再看到AI日志堵塞你的debugging控制台。

在其他一些解决scheme上略有不同。 把这个放在你的global.asax中:

 Microsoft.ApplicationInsights.Extensibility.Implementation.TelemetryDebugWriter.IsTracingDisabled = Debugger.IsAttached; 

它将在debugging器下运行时closures应用程序洞察debugging输出,但允许在Ctrl + F5scheme下发布应用程序洞察debugging输出,并将debugging版本发布到testing服务器

我们已经find了最简单的方法来防止它跟踪到Debug日志,就像下面这样简单:

 Extensibility.Implementation.TelemetryDebugWriter.IsTracingDisabled = True 

Microsoft.ApplicationInsights.AspNetCore版本2.1

 services.AddApplicationInsightsTelemetry(options => { options.EnableDebugLogger = false; });