Отключить Application insights в отладке

Как отключить Application insights автоматически при использовании конфигурации отладки и включить ее только при выпуске?
Можно ли это сделать без создания другого ключа инструментирования только для отладки?

У меня trackevent операторы, разбросанные по всему коду, заключая их в проверку препроцессора отладки, не являются идеальным решением.

мое текущее решение-установить 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

10 ответов


вы можете попробовать использовать TelemetryConfiguration.DisableTelemetry собственность Что-то вроде этого..

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

в качестве дополнения к другим решениям я бы предложил добавить следующее, скажем, к 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, которые поймут его лучше, чем #-директив.


как объяснено в вопросе не развертывание или развертывание ApplicationInsights.конфиг без <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


для ASP.NET основные проекты App Insights включены по умолчанию, что фактически регистрирует тонну информации в окне отладки.

чтобы отключить его, перейдите в "Инструменты --> Параметры --> проекты и решения --> веб-проекты" и установите флажок " Отключить локальные приложения для Asp.Net основные веб-проекты."

Ниже приведен образ для отключения локального приложения insights.

Image

для получения дополнительной информации по этому вопросу вы можете увидеть официальную проблему github здесь


у меня только что была такая же проблема.

мы хотели контролировать настройку в интернете.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. (не забудьте удалить его из ). Тогда я вызвал этот метод из Application_Start()

public static void RegisterTelemetryInstrumentationKey()
{
    if (string.IsNullOrWhiteSpace(WebConfigurationManager.AppSettings["TelemetryInstrumentationKey"])
    {
        TelemetryConfiguration.Active.DisableTelemetry = true;
    }
    else
    {
        TelemetryConfiguration.Active.InstrumentationKey = AppSettings.TelemetryInstrumentationKey;
    }
}

в основное приложение ASP.NET вы можете добавить Startus.cs для отключения Application Insights в среде разработки:

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

добавьте это в конструктор сразу после builder.AddApplicationInsightsSettings(); команда, и вы больше не увидите журналы AI, забивающие вашу консоль отладки.


немного другая игра на некоторых других решениях. Поместите это в свой глобальный.асакс:

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

он отключит вывод отладки App insights при запуске под отладчиком, но разрешит его в сценариях Ctrl+F5 и отладочных сборках, опубликованных на тестовых серверах


мы нашли самый простой способ предотвратить его трассировку в журнал отладки так же просто, как:

Extensibility.Implementation.TelemetryDebugWriter.IsTracingDisabled = True

Microsoft.Функция applicationinsights.AspNetCore Версии 2.1

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