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

Alb*_*lli 90 c# azure-application-insights

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

我有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

小智 65

您可以尝试使用 TelemetryConfiguration.DisableTelemetry属性这样的方式..

#if DEBUG
            TelemetryConfiguration.Active.DisableTelemetry = true;
#endif
Run Code Online (Sandbox Code Playgroud)

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

Ale*_*idt 59

作为其他解决方案的补充,我建议添加以下内容让我们说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;
}
Run Code Online (Sandbox Code Playgroud)

这样做的好处是,它不需要对配置进行任何更改,并且它可以更好地使用像ReSharper这样的工具,它比#-directives 更好地理解它.

  • 我们通常将 DEBUG 配置部署到 staging 并将 RELEASE 配置部署到生产。它们都可以启用 OWN 遥测。因此,您的更改将禁用登台环境的遥测。 (2认同)
  • @Sergey 我建议定义一个配置并在那里定义一个 STAGING 变量。从而可以更好地区分本地调试。另一种选择是定义一个新符号 LOCAL 并在 `Conditional` 属性中替换它。 (2认同)

Siv*_*thi 29

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

要禁用它,请转到"工具 - >选项 - >项目和解决方案 - > Web项目",然后选中"禁用Asp.Net Core Web项目的本地应用程序洞察".

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

图片

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

  • 该选项甚至不再存在 (7认同)
  • 这对我不起作用。看起来应该是这样,但由于某种原因,我的调试输出仍然充斥着这些毫无意义的消息。 (3认同)

Alb*_*lli 21

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

#if !DEBUG
    Microsoft.ApplicationInsights.Extensibility.TelemetryConfiguration.Active.InstrumentationKey = "instrumentation key";
#endif
Run Code Online (Sandbox Code Playgroud)

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

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

以下是确认:"如果要动态设置密钥 - 例如,如果要将应用程序的结果发送到不同的资源 - 您可以省略配置文件中的密钥,并将其设置为代码."

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


Ser*_* G. 13

我决定使用这两种方法.我已经移动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;
    }
}
Run Code Online (Sandbox Code Playgroud)


alv*_*alv 13

使用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;
}
Run Code Online (Sandbox Code Playgroud)

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

  • 今天这已经过时了,我们今天如何正确地做到这一点? (4认同)
  • `TelemetryDebugWriter.IsTracingDisabled = true` 在最新的 asp.net core 中并未被弃用,并且工作得很好。只需省略另一行即可。 (3认同)

chr*_*389 10

我刚才有同样的问题.

我们想控制web.config中的设置,因此在我们的应用设置中添加了一个DisableAITelemetry键:

  <appSettings>
    <add key="DisableAITelemetry" value="true" />
  </appSettings>
Run Code Online (Sandbox Code Playgroud)

使用实时和演示版本,我们不会包含值(因此默认为false).

我们可以通过添加以下内容来解决它:

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


sal*_*uce 9

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

if (env.IsDevelopment()) {
    TelemetryConfiguration.Active.DisableTelemetry = true;
}
Run Code Online (Sandbox Code Playgroud)

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


Ian*_*emp 9

从 ASP.NET Core 3.1 开始:

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

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

两者可以一起使用来抑制代码中的所有 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
    }
}
Run Code Online (Sandbox Code Playgroud)

  • @KristofferJälén 我不相信你能做到。这是最小 API 模板/功能的巨大缺点,也是我像躲避瘟疫一样避免它的原因:对于极其简单和标准的东西来说,这很好,但一旦你实际上需要哪怕是最轻微的复杂性或偏离规范,你在没有桨的情况下沿着小溪而上。根据我的经验,当您不可避免地必须重新编写代码以使用正确的语法时,该模板所做的唯一事情就是浪费时间。 (2认同)

Jos*_*osh 8

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

Microsoft.ApplicationInsights.Extensibility.Implementation.TelemetryDebugWriter.IsTracingDisabled = Debugger.IsAttached;
Run Code Online (Sandbox Code Playgroud)

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


JJS*_*JJS 7

Microsoft.ApplicationInsights.AspNetCore 2.1 版

services.AddApplicationInsightsTelemetry(options =>
{
    options.EnableDebugLogger = false;
});
Run Code Online (Sandbox Code Playgroud)

  • 我不确定那种信息是什么。我相信您正在寻找`TelemetryDebugWriter.IsTracingDisabled = true;` 来删除它们。 (3认同)

小智 6

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

Extensibility.Implementation.TelemetryDebugWriter.IsTracingDisabled = True
Run Code Online (Sandbox Code Playgroud)