在调试中禁用应用程序洞察

时间:2015-08-17 18:40:14

标签: c# azure-application-insights

如何在使用调试配置时自动禁用应用程序洞察,并仅在发布时启用它? 是否可以在不创建另一个仅用于调试的检测键的情况下执行此操作?

我将trackevent语句分散在整个代码中,将它们封装在调试预处理器中并不是一个理想的解决方案。

我目前的解决方案是将Build Action文件的ApplicationInsights.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

16 个答案:

答案 0 :(得分:62)

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

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

答案 1 :(得分:55)

作为对其他解决方案的补充,我建议添加以下内容,并对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这样的工具,它比# - 指令更能理解它。

答案 2 :(得分:23)

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

要禁用它,请转到&#34; TOOLS - &gt;选项 - &gt;项目和解决方案 - &gt;网络项目&#34;并检查&#34;禁用Asp.Net Core Web项目的本地Application Insights。&#34;

以下是禁用本地应用洞察的图片。

Image

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

答案 3 :(得分:20)

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

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

此次通话后创建的每个TelemetryClient都会有正确的密钥,并会跟踪事件,因此您无需更改所有地方的代码。 不调用上述方法或将参数保留为空将阻止事件,因为没有配置密钥。

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

以下是确认: &#34;如果要动态设置密钥 - 例如,如果要将应用程序的结果发送到不同的资源 - 可以省略配置文件中的密钥,并将其设置为代码。&#34; < / p>

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

答案 4 :(得分:12)

我决定使用这两种方法。我已将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;
    }
}

答案 5 :(得分:10)

我刚刚遇到同样的问题。

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

答案 6 :(得分:9)

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

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

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

答案 7 :(得分:7)

其他一些解决方案略有不同。把它放在你的global.asax:

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

在调试器下运行时,它将关闭app insights调试输出,但在Ctrl + F5场景下允许它并调试发布到测试服务器的版本

答案 8 :(得分:6)

使用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项目之间搜索相似的引用时,两条线彼此相邻将很有帮助。

答案 9 :(得分:5)

我们发现阻止它跟踪调试日志的最简单方法就是:

Extensibility.Implementation.TelemetryDebugWriter.IsTracingDisabled = True

答案 10 :(得分:3)

Microsoft.ApplicationInsights.AspNetCore版本2.1

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

答案 11 :(得分:3)

从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 (env.IsDevelopment())
    {
#if DEBUG
        configuration.DisableTelemetry = true;

        TelemetryDebugWriter.IsTracingDisabled = true;
#endif
    }
}

答案 12 :(得分:1)

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

答案 13 :(得分:1)

上面建议的解决方案已被弃用(参考:https://github.com/microsoft/applicationinsights-dotnet/issues/1152)。在 dotnet core 中,动态禁用遥测的新方法是:

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddApplicationInsightsTelemetry();
    }

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

(参考:https://docs.microsoft.com/en-us/azure/azure-monitor/app/asp-net-core#disable-telemetry-dynamically

如果您想在自定义 WebApplicationFactory 中禁用遥测(在进行集成测试时),您可以这样做:

public class CustomWebApplicationFactory<TStartup> : WebApplicationFactory<TStartup> where TStartup : class
    protected override void ConfigureWebHost(IWebHostBuilder builder)
    {
        builder.ConfigureServices((context, services) =>
        {
            // Disable application insights during testing.
            services.Configure<TelemetryConfiguration>(
                (telemetryConfig) => {
                    telemetryConfig.DisableTelemetry = true;
                });
        });
        base.ConfigureWebHost(builder);
    }
}

有关集成测试的更多背景信息,请参阅 https://docs.microsoft.com/en-us/aspnet/core/test/integration-tests?view=aspnetcore-5.0

答案 14 :(得分:0)

从.NET Core 3.1开始:

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

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

答案 15 :(得分:0)

我们可以修改“appsetting.json”文件,添加如下属性

"ApplicationInsights": {
    "EnableRequestTrackingTelemetryModule": false,
    "EnableEventCounterCollectionModule": false,
    "EnableDependencyTrackingTelemetryModule": false,
    "EnablePerformanceCounterCollectionModule": false,
    "EnableDiagnosticsTelemetryModule": false
  }

您可以找到更多信息here