在调试中禁用应用程序洞察
Disable application insights in debug
如何在使用调试配置时自动禁用应用程序洞察并仅在发布时启用它?
是否可以在不创建另一个仅用于调试的检测密钥的情况下执行此操作?
我有 trackevent
语句散布在整个代码中,将它们包含在调试预处理器检查中并不是一个理想的解决方案。
我目前的解决方案是将 ApplicationInsights.config
文件的 Build Action
设置为 None
这样它就不会被复制到项目的输出目录,但这不是一个过程可以根据活动构建配置自动执行。
有一个开发者模式,但需要手动更改(如果可以有条件地设置配置文件,清空 instrumentationkey 也解决了问题)。参见 http://apmtips.com/blog/2015/02/02/developer-mode/
你可以试试TelemetryConfiguration.DisableTelemetry 属性
像这样..
#if DEBUG
TelemetryConfiguration.Active.DisableTelemetry = true;
#endif
如问题中所述,在没有 <instrumentationkey>key</instrumentationkey>
的情况下不部署或部署 ApplicationInsights.config 会阻止生成事件。
然后您可以将检测密钥放入代码中(在我的情况下仅在发布时)
#if !DEBUG
Microsoft.ApplicationInsights.Extensibility.TelemetryConfiguration.Active.InstrumentationKey = "instrumentation key";
#endif
在此调用后创建的每个 TelemetryClient
都将具有正确的密钥并将跟踪事件,因此您不必更改所有地方的代码。
不调用上述方法或将参数留空将阻止事件,因为没有配置密钥。
基本上 ApplicationInsights.config
文件会覆盖任何设置检测密钥的代码,删除其中的 <instrumentationkey>key</instrumentationkey>
将允许您使用代码来配置密钥。
如果您完全删除文件,它将不起作用。
确认如下:
"If you want to set the key dynamically - for example if you want to send results from your application to different resources - you can omit the key from the configuration file, and set it in code instead."
我刚遇到同样的问题。
我们想要控制 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;
我决定使用这两种方法。我已将 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;
}
}
作为对其他解决方案的补充,我建议将以下内容添加到 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 等工具一起使用,后者比 #
-指令更能理解它。
我们发现防止它跟踪到调试日志的最简单方法如下:
Extensibility.Implementation.TelemetryDebugWriter.IsTracingDisabled = True
其他一些解决方案的玩法略有不同。将其放入您的 global.asax:
Microsoft.ApplicationInsights.Extensibility.Implementation.TelemetryDebugWriter.IsTracingDisabled = Debugger.IsAttached;
在调试器下 运行 时将关闭应用洞察调试输出,但在 Ctrl+F5 场景和发布到测试服务器的调试版本下允许它
在 ASP.NET 核心应用程序中,您可以将以下内容添加到 Startus.cs 以在开发环境中关闭 Application Insights:
if (env.IsDevelopment()) {
TelemetryConfiguration.Active.DisableTelemetry = true;
}
将此添加到构造函数中,紧跟在 builder.AddApplicationInsightsSettings();
命令之后,您将不会再看到 AI 日志阻塞调试控制台。
Microsoft.ApplicationInsights.AspNetCore 版本 2.1
services.AddApplicationInsightsTelemetry(options =>
{
options.EnableDebugLogger = false;
});
对于 ASP.NET 核心项目,App Insights 默认处于打开状态,这实际上会将大量信息记录到调试 window。
要禁用它,请转至 "TOOLS --> Options --> Projects and Solutions --> Web Projects" 并选中 "Disable local Application Insights for Asp.Net Core web projects."
下图是禁用本地应用洞察的图片。
有关此问题的更多信息,请参阅官方 github 问题 here
运行 ASP.NET Core 2.1 web 应用程序 Visual Studio 2017 (15.9.2) "Disable local Application Insights for Asp.Net Core web projects" 没有清除我的调试 [=23] 中的输出=].
然而,将以下内容添加到 Startup.cs 中的 Configure() 就完成了工作;
if (_env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
TelemetryConfiguration.Active.DisableTelemetry = true;
TelemetryDebugWriter.IsTracingDisabled = true;
}
请注意,IsTracingDisabled 是关键解决方案,但我保留了 DisableTelemetry 以备不时之需!此外,在同一解决方案中搜索 .NET Framework 和 .NET Core 项目之间的相似引用时,将两行并排放置很有帮助。
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 核心 3.1 开始:
public void Configure(IApplicationBuilder app, IHostingEnvironment env,
TelemetryConfiguration configuration)
{
configuration.DisableTelemetry = true;
}
TelemetryDebugWriter.IsTracingDisabled = true;
(可以从任何地方调用上面的方法,但是在应用程序的生命周期中越早越好)。
两者可以一起使用以抑制代码中的所有 Application Insights activity。我使用 #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://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
我们可以修改文件“appsetting.json”,添加如下属性
"ApplicationInsights": {
"EnableRequestTrackingTelemetryModule": false,
"EnableEventCounterCollectionModule": false,
"EnableDependencyTrackingTelemetryModule": false,
"EnablePerformanceCounterCollectionModule": false,
"EnableDiagnosticsTelemetryModule": false
}
您可以找到更多信息 here。
如何在使用调试配置时自动禁用应用程序洞察并仅在发布时启用它?
是否可以在不创建另一个仅用于调试的检测密钥的情况下执行此操作?
我有 trackevent
语句散布在整个代码中,将它们包含在调试预处理器检查中并不是一个理想的解决方案。
我目前的解决方案是将 ApplicationInsights.config
文件的 Build Action
设置为 None
这样它就不会被复制到项目的输出目录,但这不是一个过程可以根据活动构建配置自动执行。
有一个开发者模式,但需要手动更改(如果可以有条件地设置配置文件,清空 instrumentationkey 也解决了问题)。参见 http://apmtips.com/blog/2015/02/02/developer-mode/
你可以试试TelemetryConfiguration.DisableTelemetry 属性 像这样..
#if DEBUG
TelemetryConfiguration.Active.DisableTelemetry = true;
#endif
如问题中所述,在没有 <instrumentationkey>key</instrumentationkey>
的情况下不部署或部署 ApplicationInsights.config 会阻止生成事件。
然后您可以将检测密钥放入代码中(在我的情况下仅在发布时)
#if !DEBUG
Microsoft.ApplicationInsights.Extensibility.TelemetryConfiguration.Active.InstrumentationKey = "instrumentation key";
#endif
在此调用后创建的每个 TelemetryClient
都将具有正确的密钥并将跟踪事件,因此您不必更改所有地方的代码。
不调用上述方法或将参数留空将阻止事件,因为没有配置密钥。
基本上 ApplicationInsights.config
文件会覆盖任何设置检测密钥的代码,删除其中的 <instrumentationkey>key</instrumentationkey>
将允许您使用代码来配置密钥。
如果您完全删除文件,它将不起作用。
确认如下: "If you want to set the key dynamically - for example if you want to send results from your application to different resources - you can omit the key from the configuration file, and set it in code instead."
我刚遇到同样的问题。
我们想要控制 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;
我决定使用这两种方法。我已将 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;
}
}
作为对其他解决方案的补充,我建议将以下内容添加到 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 等工具一起使用,后者比 #
-指令更能理解它。
我们发现防止它跟踪到调试日志的最简单方法如下:
Extensibility.Implementation.TelemetryDebugWriter.IsTracingDisabled = True
其他一些解决方案的玩法略有不同。将其放入您的 global.asax:
Microsoft.ApplicationInsights.Extensibility.Implementation.TelemetryDebugWriter.IsTracingDisabled = Debugger.IsAttached;
在调试器下 运行 时将关闭应用洞察调试输出,但在 Ctrl+F5 场景和发布到测试服务器的调试版本下允许它
在 ASP.NET 核心应用程序中,您可以将以下内容添加到 Startus.cs 以在开发环境中关闭 Application Insights:
if (env.IsDevelopment()) {
TelemetryConfiguration.Active.DisableTelemetry = true;
}
将此添加到构造函数中,紧跟在 builder.AddApplicationInsightsSettings();
命令之后,您将不会再看到 AI 日志阻塞调试控制台。
Microsoft.ApplicationInsights.AspNetCore 版本 2.1
services.AddApplicationInsightsTelemetry(options =>
{
options.EnableDebugLogger = false;
});
对于 ASP.NET 核心项目,App Insights 默认处于打开状态,这实际上会将大量信息记录到调试 window。
要禁用它,请转至 "TOOLS --> Options --> Projects and Solutions --> Web Projects" 并选中 "Disable local Application Insights for Asp.Net Core web projects."
下图是禁用本地应用洞察的图片。
有关此问题的更多信息,请参阅官方 github 问题 here
运行 ASP.NET Core 2.1 web 应用程序 Visual Studio 2017 (15.9.2) "Disable local Application Insights for Asp.Net Core web projects" 没有清除我的调试 [=23] 中的输出=].
然而,将以下内容添加到 Startup.cs 中的 Configure() 就完成了工作;
if (_env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
TelemetryConfiguration.Active.DisableTelemetry = true;
TelemetryDebugWriter.IsTracingDisabled = true;
}
请注意,IsTracingDisabled 是关键解决方案,但我保留了 DisableTelemetry 以备不时之需!此外,在同一解决方案中搜索 .NET Framework 和 .NET Core 项目之间的相似引用时,将两行并排放置很有帮助。
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 核心 3.1 开始:
public void Configure(IApplicationBuilder app, IHostingEnvironment env,
TelemetryConfiguration configuration)
{
configuration.DisableTelemetry = true;
}
TelemetryDebugWriter.IsTracingDisabled = true;
(可以从任何地方调用上面的方法,但是在应用程序的生命周期中越早越好)。
两者可以一起使用以抑制代码中的所有 Application Insights activity。我使用 #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://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
我们可以修改文件“appsetting.json”,添加如下属性
"ApplicationInsights": {
"EnableRequestTrackingTelemetryModule": false,
"EnableEventCounterCollectionModule": false,
"EnableDependencyTrackingTelemetryModule": false,
"EnablePerformanceCounterCollectionModule": false,
"EnableDiagnosticsTelemetryModule": false
}
您可以找到更多信息 here。