ChatGPT解决这个技术问题 Extra ChatGPT

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

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

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

我当前的解决方案是将 ApplicationInsights.config 文件的 Build Action 设置为 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

对于 2021 年遇到此问题的任何人:按有效而不是投票对答案进行排序,以获取最新信息。

A
Abhijit Jana

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

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

我尝试在 WindowsAppInitializer.InitializeAsync(); 之前添加此语句(我也在它之后尝试过),但 Visual Studio 应用程序洞察事件计数器增加了。由于会话和用户太多,我无法查看此会话是否有效地记录在 azure 门户中。我晚上试试。
Alberto,我这样测试过 - 'code' public seal partial class MainPage : Page { TelemetryClient telemetry;公共 MainPage() { this.InitializeComponent(); #if DEBUG TelemetryConfiguration.Active.DisableTelemetry = true; #endif 遥测 = 新 TelemetryClient(); } private void button_Click(object sender, RoutedEventArgs e) { telemetry.TrackEvent("Event Custom"); '代码' .. 并且似乎正在工作。我也会尝试其他一些页面。会及时更新
此外,您可以从 Visual Studio 本身检查遥测事件是否已发送。我昨天刚刚发布了这个How to get number of Application Insights events from Visual Studio 2015
这就是我写的,视觉工作室事件计数器增加了。
即使 DisableTelemetry 设置为 true 且检测密钥为空,遥测模块仍将继续收集数据。数据不会被发送,但会被收集。请参阅针对 App Insights 记录的此问题:github.com/Microsoft/ApplicationInsights-dotnet/issues/397 如果要禁用首次输出,可以按照 github.com/Microsoft/ApplicationInsights-dotnet/issues/310 中的步骤操作
A
Alexander Schmidt

作为其他解决方案的补充,我建议将以下内容添加到 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 等一些工具配合使用效果更好,这些工具比 # 指令更能理解它。


我们通常将 DEBUG 配置部署到 staging 并将 RELEASE 配置部署到生产。它们都可以启用 OWN 遥测。因此,您的更改将禁用暂存环境的遥测。
@Sergey我建议定义一个配置并在那里定义一个 STAGING 变量。因此,您可以更好地区分本地调试。另一种选择是定义一个新符号 LOCAL 并在 Conditional 属性中替换它。
通常我们有不同的数据库连接字符串、存储帐户和 STAG 和 PROD 的其他设置(如 FB 应用程序 ID、SendGrid 帐户、应用程序设置等)。此外,我们在本地拥有 Azure 存储模拟器和本地 SQL Express。所以没有办法使用单一配置。我们需要 3 种不同的配置,本地配置应该禁用遥测。
您仍然可以在多个配置上定义自定义符号。然后,您可以使用 Conditional("WHATEVER"),而不是使用 Conditional("DEBUG")。或者,您可以从 appSettings 中获取一个值并使用转换在非本地环境中将其吹走。
TelemetryConfiguration 未定义。
S
Siva Chamarthi

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

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

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

https://i.stack.imgur.com/QH8T3.png

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


这对我不起作用。看起来应该,但由于某种原因,我的调试输出仍然充斥着这些毫无意义的消息。
不起作用....我所做的方法是添加 services.AddApplicationInsightsTelemetry(... 仅当不是开发环境时。
该选项甚至不再存在
a
alv

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

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

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

请注意,IsTracingDisabled 是关键解决方案,但我留在 DisableTelemetry 中是为了更好地衡量!另外,在同一解决方案中搜索 .NET Framework 和 .NET Core 项目之间的类似引用时,将两行并排放置会很有帮助。


今天已经过时了,我们今天如何正确地做到这一点?
TelemetryDebugWriter.IsTracingDisabled = true 在最新的 asp.net 核心中没有被弃用并且效果很好。只是省略另一行。
d
dasch88

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

#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


请参阅 this blog 如何将其与单独的 ApplicationInsights.Debug/Release.config 一起使用
S
SerjG

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

今天已经过时了,我们今天如何正确地做到这一点?
I
Ian Kemp

从 ASP.NET Core 3.1 开始:

要禁用将任何 App Insights 遥测记录到 Azure:

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
    }
}

@IanKemp 您如何在 .NET 6 Minimal API 中访问 TelemetryConfiguration
@KristofferJälén 我不相信你可以。这是最小 API 模板/功能的巨大缺点,也是我像瘟疫一样避免它的原因:对于极其简单和标准的事情,它很好,但只要你真的需要哪怕是最轻微的复杂性或偏离规范,你在没有桨的小溪上。根据我的经验,这个模板所做的唯一事情就是浪费时间,因为您不可避免地不得不重新编写代码以使用正确的语法。
c
chris31389

我刚遇到同样的问题。

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

J
Josh

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

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

在调试器下运行时,它将关闭应用程序洞察调试输出,但在 Ctrl+F5 场景下允许它,并将调试版本发布到测试服务器


P
Peter Jarrett

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

Extensibility.Implementation.TelemetryDebugWriter.IsTracingDisabled = True

DisableTelemetry 对我没有影响,这种方法确实将其关闭。
s
saluce

在 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”消息。
J
JJS

Microsoft.ApplicationInsights.AspNetCore 版本 2.1

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

这是否应该在 Visual Studio 的“调试”面板中隐藏 Application Insights Telemetry (unconfigured) 消息 - 因为如果是这样,它似乎不起作用:-(
我不确定那种信息是什么。我相信您正在寻找 TelemetryDebugWriter.IsTracingDisabled = true; 来删除它们。
r
rjacobsen0

上面建议的解决方案已被弃用(参考: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


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

今天已经过时了,我们今天如何正确地做到这一点?
s
silkfire

从 .NET Core 3.1 开始:

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

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

这是执行此操作的文档,包括通过依赖注入获取 TelemetryConfiguration:docs.microsoft.com/en-us/azure/azure-monitor/app/…
G
Grigory Zhadko

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

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

您可以找到更多信息 here


我认为几乎是最好的解决方案。您可以将配置放在 appSettings.Development.json 中。这样在部署到 Azure 时不需要任何代码。

关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅