Вимкнути інформацію про програму у налагодженні


99

Як я можу автоматично відключити статистику програми при використанні конфігурації налагодження та включити її лише під час випуску?
Чи можна це зробити без створення іншого інструментального ключа лише для налагодження?

У мене trackeventзаяви, розкидані по всьому коду, вкладення їх всередину перевірки препроцесора налагодження не є ідеальним рішенням.

Моя поточна рішення для установки Build Actionв ApplicationInsights.configфайл , щоб 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

Відповіді:


69

Ви можете спробувати скористатися TelemetryConfiguration.DisableTelemetry Properties приблизно так.

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

Я спробував додати це твердження раніше WindowsAppInitializer.InitializeAsync();(я також спробував після нього), але лічильник подій про уявлення візуальної студії збільшився. Мені не вдалося побачити, чи ефективно цей сеанс було записано на блакитному порталі, оскільки там занадто багато сеансів та користувачів. Я спробую протягом ночі.
Альберто Рівеллі

Альберто, я протестував так - "код" публічний герметичний частковий клас MainPage: Сторінка {TelemetryClient telemetry; public MainPage () {this.InitializeComponent (); #if DEBUG TelemetryConfiguration.Active.DisableTelemetry = true; #endif telemetry = новий TelemetryClient (); } приватна пустота button_Click (відправник об'єкта, RoutedEventArgs e) {telemetry.TrackEvent ("Подія користувача"); } 'код' .. і, здається, працює. я спробую і деякі інші сторінки. буде інформувати вас
Abhijit Jana

Також із самої Visual Studio ви можете перевірити, надсилаються чи ні події телеметрії. Я щойно опублікував цей ітарейний день Як отримати кількість подій програми Insights від Visual Studio 2015
Abhijit Jana

Ось що я написав, лічильник подій візуальної студії збільшився.
Альберто Рівеллі

2
Навіть якщо функція DisableTelemetry встановлена ​​на істинний та порожній ключ приладу, модулі телеметрії продовжуватимуть збирати дані. Дані не надсилаються, але вони будуть зібрані. Дивіться цю проблему, зареєстровану у програмі Insights App: github.com/Microsoft/ApplicationInsights-dotnet/issues/397 Якщо ви хочете вимкнути дебютний вихід, можете виконати кроки, знайдені на веб-сайті github.com/Microsoft/ApplicationInsights-dotnet/isissue/310
Гійом Лахай

61

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


1
Зазвичай ми розгортаємо конфігурацію DEBUG для постановки та конфігурацію RELEASE для виробництва. Для обох може бути включена власна телеметрія. Таким чином, ваша зміна відключить телеметрію для постановочного середовища.
Сергій Григорович

1
@Sergey Я б запропонував визначити єдину конфігурацію та визначити там змінну STAGING. Таким чином, ви можете краще розрізнити налагодження локально. Іншим варіантом було б визначити новий символ LOCAL і замінити його на Conditional-attribute.
Олександр Шмідт

Зазвичай у нас є різні рядки підключення до БД, акаунти пам’яті та інші налаштування для STAG та PROD (наприклад, ідентифікатор програми FB, акаунт SendGrid, налаштування додатків тощо). Більше того - локально у нас є емулятор зберігання Azure та локальний SQL Express. Тому немає можливості працювати з єдиною конфігурацією. Нам потрібні 3 різні конфігурації, а в локальній має бути відключена телеметрія.
Сергій Григорович

Ви все ще можете визначити спеціальний символ для декількох своїх конфігурацій. Тоді замість використання Conditional ("DEBUG") ви можете зробити Conditional ("ШТО БУДЬ"). Крім того, ви можете захопити значення з appSettings і використовувати перетворення, щоб відбити його в не локальних середовищах.
joelmdev

34

Для базових проектів ASP.NET Core Insights за замовчуванням увімкнено, що фактично записує тону інформації у вікно налагодження.

Щоб вимкнути це, перейдіть до "TOOLS -> Options -> Projects and Solutions -> Web Projects" і поставте прапорець "Вимкнути місцеві статистичні дані для веб-проектів Asp.Net Core".

Нижче наведено зображення для відключення місцевих даних про додатки.

Зображення

Для отримання додаткової інформації про це ви можете ознайомитись з офіційним номером github тут


22

Як пояснено у запитанні, не розгортання та не розгортання 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


1
Дивіться цей блог, як використовувати це окремоApplicationInsights.Debug/Release.config
Yahoo Serious

16

Я вирішив використовувати обидва підходи. Я перемістив 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;
    }
}

це сьогодні застаріло, як ми це робимо сьогодні правильно?
l - '' '''--------- '' '' '' '' ''

15

Запустивши веб-додаток ASP.NET Core 2.1 за допомогою Visual Studio 2017 (15.9.2), "Вимкнути місцеві статистичні дані для веб-проектів Asp.Net Core" не очистив результат у моєму вікні налагодження.

Однак додавши наступне до Configure () у Startup.cs зробив цю роботу;

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

Зауважте, що IsTracingDisabled було ключовим рішенням , але я пішов з відключенняТелеметрії на добру міру! Плюс наявність обох рядків один біля одного корисний при пошуку подібних посилань між проектами .NET Framework та .NET Core в одному і тому ж рішенні.


2
це сьогодні застаріло, як ми це робимо сьогодні правильно?
l - '' '''--------- '' '' '' '' ''

11

У мене щойно виникло те саме питання.

Ми хотіли контролювати налаштування в 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;

10

Деякі інші рішення дещо відрізняються. Помістіть це у своєму global.asax:

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

Він буде вимикати вихідні дані налагодження для додатків під час роботи під налагоджувачем, але дозволить у сценаріях Ctrl + F5 та збірки налагодження, опубліковані на тестових серверах


10

У додатку ASP.NET Core ви можете додати до Startus.cs таке, щоб вимкнути статистику програми в середовищі розробки:

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

Додайте це до конструктора відразу після builder.AddApplicationInsightsSettings();команди, і ви більше не побачите журнали AI, що засмічують консоль налагодження.


Ні ... не змінив для мене жодної зміни (з ASP.Net Core 2.1). У вікні виводу все-таки знайдіть повідомлення з повідомленнями "Телеметричні дані щодо додатків".
Майк Гледхілл

7

Ми знайшли найпростіший спосіб не допустити його відстеження до журналу налагодження настільки ж просто:

Extensibility.Implementation.TelemetryDebugWriter.IsTracingDisabled = True

5

Microsoft.ApplicationInsights.AspNetCore Версія 2.1

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

Це має приховувати Application Insights Telemetry (unconfigured)повідомлення від панелі налагодження у Visual Studio - адже якщо так, то, схоже, не працює :-(
Simon_Weaver

3
Я не впевнений, що таке повідомлення. Я вважаю, ви шукаєте TelemetryDebugWriter.IsTracingDisabled = true;їх видалити.
JJS

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

1
це сьогодні застаріло, як ми це робимо сьогодні правильно?
l - '' '''--------- '' '' '' '' ''

0

Оскільки .NET Core 3.1:

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

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

2
Ось документи для цього, зокрема отримання TelemetryConfiguration через ін'єкцію залежності: docs.microsoft.com/en-us/azure/azure-monitor/app/…
Ной Шталь

0

Станом на ASP.NET Core 3.1:

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

(вище можна зателефонувати з будь-якого місця, але чим раніше у життєвому циклі вашої програми, тим краще).

І те й інше можна використовувати разом, щоб придушити всю активність Insights у вашому коді. Я охороняю #if DEBUGдирективу про те, щоб AppInsights нічого не робив на моїй локальній машині, але випромінює події під час завантаження на наш сервер розробників Azure:

public void Configure(IApplicationBuilder app, IHostingEnvironment env,
    TelemetryConfiguration configuration)
{
    if (app.IsDevelopment())
    {
#if DEBUG
        configuration.DisableTelemetry = true;

        TelemetryDebugWriter.IsTracingDisabled = true;
#endif
    }
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.