在调试中禁用应用程序见解


99

如何在使用调试配置时自动禁用应用程序见解并仅在发布时启用它?
是否可以在不创建仅用于调试的其他工具密钥的情况下执行此操作?

trackevent在整个代码中散布着语句,将它们包含在调试预处理器检查中并不是一个理想的解决方案。

我当前的解决方案是Build ActionApplicationInsights.config文件的设置为,None以便不将其复制到项目的输出目录中,但这不是一个可以根据活动的构建配置自动执行的过程。

有一个开发人员模式,但需要手动更改(如果可以有条件地设置配置文件,也可以清空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

Answers:


69

您可以尝试使用 TelemetryConfiguration.DisableTelemetry属性。

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

我尝试在之前添加此语句WindowsAppInitializer.InitializeAsync();(也尝试过添加),但是Visual Studio应用程序洞察事件计数器增加了。由于会话和用户过多,我无法查看此会话是否有效记录在azure门户中。我会在夜间尝试。
阿尔贝托·里维利

Alberto,我像这样测试-“代码”公共密封子类MainPage:Page {TelemetryClient telemetry; 公共MainPage(){this.InitializeComponent(); #if DEBUG TelemetryConfiguration.Active.DisableTelemetry = true; #endif telemetry =新的TelemetryClient(); } private void button_Click(object sender,RoutedEventArgs e){telemetry.TrackEvent(“ Event Custom”); }'code'..似乎正在工作。我也会尝试其他一些页面。将为您提供最新信息
Abhijit Jana

另外,从Visual Studio本身,您可以检查是否发送了遥测事件。我刚刚在昨天昨天发布了如何从Visual Studio 2015中获取Application Insights事件的数量
Abhijit Jana

这就是我写的,Visual Studio活动计数器增加了。
艾伯托·里维利

2
即使DisableTelemetry设置为true且仪表键为空,遥测模块仍将继续收集数据。数据不会发送,但会被收集。请参阅针对App Insights记录的以下问题:github.com/Microsoft/ApplicationInsights-dotnet/issues/397如果要禁用首次显示输出,可以按照github.com/Microsoft/ApplicationInsights-dotnet/issues/310上的步骤进行操作
Guillaume LaHaye

61

作为其他解决方案的补充,我建议在以下内容中添加以下内容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;
}

这样做的好处是,它不需要更改配置,并且与ReSharper之类的某些工具(比#-directives 更好地理解它)更好地协同工作。


1
我们通常将DEBUG配置部署到登台,将RELEASE配置部署到生产。它们都可以启用OWN遥测。因此,您的更改将禁用登台环境的遥测。
谢尔盖·

1
@Sergey我建议定义一个配置,并在那里定义一个STAGING变量。因此,您可以更好地区分本地调试。另一个选择是定义一个新的符号LOCAL并将其替换为Conditional-attribute。
亚历山大·施密特

通常,我们具有不同的数据库连接字符串,存储帐户以及STAG和PROD的其他设置(例如FB应用程序ID,SendGrid帐户,应用程序设置等)。此外-在本地,我们有Azure存储模拟器和本地SQL Express。因此,无法使用单一配置。我们需要3种不同的配置,本地配置应具有禁用的遥测功能。
谢尔盖G.16年

您仍然可以在多个配置中定义一个自定义符号。然后,可以不使用Conditional(“ DEBUG”),而可以执行Conditional(“ WHATEVER”)。另外,您可以从appSettings中获取一个值,然后使用转换将其在非本地环境中删除。
joelmdev

34

对于ASP.NET Core项目,App Insights默认情况下处于启用状态,实际上会将大量信息记录到调试窗口中。

要禁用它,请转到“工具->选项->项目和解决方案-> Web项目”,然后选中“为Asp.Net Core Web项目禁用本地Application Insights”。

以下是用于禁用本地应用程序见解的图像。

图片

有关该问题的更多信息,您可以在此处查看官方的github问题


22

如问题中所述,在不<instrumentationkey>key</instrumentationkey>生成阻止事件的情况下不部署或部署ApplicationInsights.config 。然后,您可以将检测密钥放入代码中(仅在我的情况下才发布)

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

TelemetryClient在此调用之后创建的每个对象都将具有正确的键并会跟踪事件,因此您不必在所有位置更改代码。由于未配置键,因此不调用上述方法或将参数保留为空将阻止事件。

基本上,该ApplicationInsights.config文件会覆盖设置检测键的所有代码,删除其中的<instrumentationkey>key</instrumentationkey>内部内容将使您可以使用代码配置检测键。 如果您完全删除文件,则无法使用。

这是确认信息:“如果要动态设置密钥-例如,如果要将结果从应用程序发送到其他资源,则可以从配置文件中省略密钥,而改为在代码中进行设置。”

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


1
请参阅此博客,如何将其单独使用ApplicationInsights.Debug/Release.config
Yahoo认真的

16

我决定同时使用两种方法。我提出InstrumentationKey来的Web.config,它会通过改造更换Web.Release.configWeb.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;
    }
}

今天已经过时了,我们今天如何正确地做到这一点?
l --''''''------------''''''''''''19-10-11

15

使用Visual Studio 2017(15.9.2)运行ASP.NET Core 2.1 Web应用程序,“禁用Asp.Net Core Web项目的本地应用程序见解”并没有清除“调试”窗口中的输出。

但是,将以下内容添加到Startup.cs中的Configure()即可;

if (_env.IsDevelopment())
{
    app.UseDeveloperExceptionPage();
    TelemetryConfiguration.Active.DisableTelemetry = true;
    TelemetryDebugWriter.IsTracingDisabled = true;
}

请注意,IsTracingDisabled是关键解决方案,但我离开DisableTelemetry的目的很不错!当在同一解决方案中的.NET Framework和.NET Core项目之间搜索相似的引用时,两条线彼此相邻也很有帮助。


2
今天已经过时了,我们今天如何正确地做到这一点?
l --''''''------------''''''''''''19-10-11

11

我刚遇到同样的问题。

我们想控制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;

10

在其他一些解决方案上的玩法略有不同。将其放在您的global.asax中:

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

在调试器下运行时,它将关闭应用程序见解调试输出,但允许它在Ctrl + F5方案下运行,并调试发布到测试服务器的内部版本


10

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

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

将其添加到构造函数中,紧接在builder.AddApplicationInsightsSettings();命令之后,您将不再看到AI日志阻塞调试控制台。


不,对我没有任何影响(使用ASP.Net Core 2.1)。在“输出”窗口中仍会收到大量“ Application Insights Telemetry”消息。
迈克·格莱德希尔

7

我们发现阻止它进入调试日志的最简单方法是:

Extensibility.Implementation.TelemetryDebugWriter.IsTracingDisabled = True

5

Microsoft.ApplicationInsights.AspNetCore版本2.1

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

这是否应该Application Insights Telemetry (unconfigured)在Visual Studio中隐藏“ 调试”面板中的消息-因为如果这样似乎不起作用:-(
Simon_Weaver

3
我不确定这种信息是什么。我相信您正在寻找TelemetryDebugWriter.IsTracingDisabled = true;删除这些内容。
JJS

3
         public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            #region Disable Application Insights debug informations
#if DEBUG
            TelemetryConfiguration.Active.DisableTelemetry = true;
            TelemetryDebugWriter.IsTracingDisabled = true;
#endif
            #endregion
//...
}

1
今天已经过时了,我们今天如何正确地做到这一点?
l --''''''------------''''''''''''19-10-11

0

从.NET Core 3.1开始:

var telemetryConfiguration = TelemetryConfiguration.CreateDefault();
telemetryConfiguration.DisableTelemetry = true;

var telemetryClient = new TelemetryClient(telemetryConfiguration);   // Use this instance
TelemetryDebugWriter.IsTracingDisabled = true;

1
这里的文档这样做的,包括通过依赖注入获得TelemetryConfiguration:docs.microsoft.com/en-us/azure/azure-monitor/app/...
诺亚斯塔尔

0

从ASP.NET Core 3.1开始:

public void Configure(IApplicationBuilder app, IHostingEnvironment env,
    TelemetryConfiguration configuration)
{
    configuration.DisableTelemetry = true;
}
TelemetryDebugWriter.IsTracingDisabled = true;

(以上内容可以在任何地方调用,但是在应用程序生命周期中越早越好)。

两者可以一起使用以禁止代码中的所有Application Insights活动。我使用一条#if DEBUG指令来确保AppInsights在本地计算机上不执行任何操作,但是在上载到我们的Azure开发服务器时不会发出事件:

public void Configure(IApplicationBuilder app, IHostingEnvironment env,
    TelemetryConfiguration configuration)
{
    if (app.IsDevelopment())
    {
#if DEBUG
        configuration.DisableTelemetry = true;

        TelemetryDebugWriter.IsTracingDisabled = true;
#endif
    }
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.