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

如何在使用调试配置时自动禁用应用程序见解,并仅在发布时启用它?
有没有可能在不创建另一个仅用于调试的检测密钥的情况下完成此操作?

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

我当前的解决方案是将 ApplicationInsights.config文件的 Build Action设置为 None,这样就不会将其复制到项目的输出目录中,但是这个过程不能基于活动的构建配置进行自动化。

有一个开发模式,但需要手动更改(如果可以有条件地设置配置文件,清空仪器键解决的问题)。参见 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

77508 次浏览

可以尝试使用 遥测配置,无法遥测属性 像这样。

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

正如在问题中解释的那样,如果没有生成 <instrumentationkey>key</instrumentationkey>阻塞事件,就不能部署或部署 ApplicationInsight. config。 然后,您可以将检测密钥放入代码中(在我的例子中,仅在发布时)

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

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

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

以下是确认信息: “如果想动态设置密钥——例如,如果想将应用程序的结果发送到不同的资源——可以从配置文件中省略密钥,而在代码中设置它。”

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

我也有同样的问题。

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

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

对于实时构建和演示构建,我们不会包含一个值(因此它的默认值为 false)。

然后我们可以通过加上这个来解决这个问题:

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

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

作为对其他解决方案的补充,我建议在 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 这样的工具会更好地工作,因为 ReSharper 比 #指令更好地理解它。

我们发现阻止它跟踪到 Debug 日志的最简单的方法如下:

Extensibility.Implementation.TelemetryDebugWriter.IsTracingDisabled = True

在其他一些解决方案上略有不同。把这个放到 global.asax 中:

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

在调试器下运行时,它将关闭应用洞察调试输出,但允许它在 Ctrl + F5场景和发布到测试服务器的调试构建下运行

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

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

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

微软。应用洞察。 AspNetCore 2.1版

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

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

要禁用它,请转到“ TOOLS —— > Options —— > Projects and Solutions —— > Web Projects”,并选中“ Disable local Application Insights for ASP。Net Core 网络项目。”

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

Image

关于这个问题的更多信息,您可以看到官方的 github 问题 给你

使用 Visual Studio 2017(15.9.2)运行 ASP.NET Core 2.1 web 应用程序。NetCoreweb 项目”没有清除我的调试窗口中的输出。

然而,在 Startup.cs 中将下面的代码添加到 Configure ()可以完成这项工作;

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

请注意,IsTracingDisable 是关键解决方案 ,但是为了更好的措施,我把它留在 Disable遥测中!另外,当搜索两行之间的类似引用时,将两行放在一起也是很有帮助的。NET 架构及。同一解决方案中的 NET 核心项目。

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

从.NET Core 3.1开始:

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


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

从 ASP.NET Core 3.1开始:

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

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

两者可以一起使用,以抑制代码中的所有 ApplicationInsights 活动。我使用 #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
}
}

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

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


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

(参考资料: https://learn.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://learn.microsoft.com/en-us/aspnet/core/test/integration-tests?view=aspnetcore-5.0

我们可以修改文件“ appseting.json”并添加以下属性

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

更多信息,您可以找到 给你