Nonaktifkan wawasan aplikasi dalam debug

99

Bagaimana cara menonaktifkan wawasan aplikasi secara otomatis saat menggunakan konfigurasi debug dan mengaktifkannya hanya saat rilis?
Apakah mungkin melakukan ini tanpa membuat kunci instrumentasi lain hanya untuk debug?

Saya memiliki trackeventpernyataan yang tersebar di seluruh kode, melampirkannya di dalam pemeriksaan preprocessor debug bukanlah solusi yang ideal.

Solusi saya saat ini adalah untuk mengatur Build Actiondari ApplicationInsights.configfile Nonesehingga tidak disalin ke direktori keluaran proyek, tapi ini bukan proses yang dapat otomatis berdasarkan aktif membangun konfigurasi.

Ada Mode Pengembang tetapi perlu diubah secara manual (jika memungkinkan untuk mengatur file konfigurasi secara bersyarat, mengosongkan kunci instrumentasi juga menyelesaikan masalah). Lihat http://apmtips.com/blog/2015/02/02/developer-mode/

Referensi: http://blogs.msdn.com/b/visualstudioalm/archive/2015/01/07/application-insights-support-for-multiple-environments-stamps-and-app-versions.aspx

Alberto Rivelli
sumber

Jawaban:

69

Anda dapat mencoba menggunakan TelemetryConfiguration.DisableTelemetry Property Sesuatu seperti ini ..

#if DEBUG
            TelemetryConfiguration.Active.DisableTelemetry = true;
#endif
Abhijit Jana
sumber
Saya mencoba menambahkan pernyataan ini sebelum WindowsAppInitializer.InitializeAsync();(saya juga mencoba setelahnya) tetapi penghitung peristiwa wawasan aplikasi studio visual meningkat. Saya tidak dapat melihat apakah sesi ini direkam secara efektif di portal biru karena ada terlalu banyak sesi dan pengguna. Saya akan mencoba pada malam hari.
Alberto Rivelli
Alberto, saya menguji seperti ini - 'kode' kelas parsial tertutup publik MainPage: Page {TelemetryClient telemetry; public MainPage () {this.InitializeComponent (); #if DEBUG TelemetryConfiguration.Active.DisableTelemetry = true; #endif telemetry = new TelemetryClient (); } private void button_Click (pengirim objek, RoutedEventArgs e) {telemetry.TrackEvent ("Event Custom"); } 'kode' .. dan sepertinya berfungsi. saya akan mencoba beberapa halaman lain juga. akan terus
mengabari
Selain itu, dari Visual Studio itu sendiri, Anda dapat memeriksa apakah peristiwa telemetri dikirim atau tidak. Saya baru saja memposting kemarin ini Cara mendapatkan jumlah acara Wawasan Aplikasi dari Visual Studio 2015
Abhijit Jana
Itulah yang saya tulis, penghitung acara studio visual meningkat.
Alberto Rivelli
2
Meskipun DisableTelemetry disetel ke true dan kunci instrumentasi kosong, modul telemetri akan terus mengumpulkan data. Data tidak akan dikirim, tetapi akan dikumpulkan. Lihat masalah ini dicatat pada App Insights: github.com/Microsoft/ApplicationInsights-dotnet/issues/397 Jika Anda ingin menonaktifkan keluaran debut, Anda dapat mengikuti langkah-langkah yang ditemukan di github.com/Microsoft/ApplicationInsights-dotnet/issues/310
Guillaume LaHaye
61

Sebagai tambahan untuk solusi lain, saya sarankan untuk menambahkan yang berikut ini, katakanlah 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;
}

Keuntungannya adalah, tidak perlu mengubah konfigurasi dan berfungsi lebih baik dengan beberapa alat seperti ReSharper yang akan memahaminya lebih baik daripada #-directives.

Alexander Schmidt
sumber
1
Kami biasanya menerapkan konfigurasi DEBUG ke konfigurasi staging dan RELEASE untuk produksi. Keduanya dapat mengaktifkan telemetri SENDIRI. Jadi perubahan Anda akan menonaktifkan telemetri untuk lingkungan pementasan.
Sergey G.
1
@ Sergey Saya akan menyarankan untuk menentukan konfigurasi tunggal dan menentukan variabel STAGING di sana. Dengan demikian Anda dapat lebih baik membedakan antara debugging secara lokal. Pilihan lainnya adalah dengan mendefinisikan simbol baru LOKAL dan menggantinya di Conditional-attribute.
Alexander Schmidt
biasanya kami memiliki string koneksi DB yang berbeda, akun penyimpanan, dan pengaturan lain untuk STAG dan PROD (seperti id aplikasi FB, akun SendGrid, pengaturan aplikasi, dll). Selain itu - secara lokal kami memiliki emulator penyimpanan Azure dan SQL Express lokal. Jadi tidak ada cara untuk bekerja dengan satu konfigurasi. Kami memerlukan 3 konfigurasi berbeda dan yang lokal harus menonaktifkan telemetri.
Sergey G.
Anda masih dapat menentukan simbol kustom di lebih dari satu konfigurasi Anda. Kemudian alih-alih menggunakan Kondisional ("DEBUG"), Anda dapat melakukan Kondisional ("APA PUN"). Atau Anda dapat mengambil nilai dari appSettings dan menggunakan transformasi untuk menghilangkannya di lingkungan non-lokal.
joelmdev
34

Untuk proyek ASP.NET Core, App Insights AKTIF secara default, yang sebenarnya mencatat banyak info ke jendela debug.

Untuk menonaktifkannya pergi ke "ALAT -> Opsi -> Proyek dan Solusi -> Proyek Web" dan centang "Nonaktifkan Wawasan Aplikasi lokal untuk proyek web Asp.Net Core."

Di bawah ini adalah gambar untuk menonaktifkan wawasan aplikasi lokal.

Gambar

Untuk info lebih lanjut tentang masalah ini, Anda dapat melihat masalah github resmi di sini

Siva Chamarthi
sumber
22

Seperti yang dijelaskan dalam pertanyaan untuk tidak menerapkan atau menerapkan ApplicationInsights.config tanpa <instrumentationkey>key</instrumentationkey>memblokir peristiwa agar tidak dibuat. Anda kemudian dapat memasukkan kunci instrumentasi dalam kode (hanya saat rilis dalam kasus saya)

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

Setiap TelemetryClientdibuat setelah panggilan ini akan memiliki kunci yang benar dan akan melacak acara sehingga Anda tidak perlu mengubah kode di semua tempat. Tidak memanggil metode di atas atau membiarkan parameter kosong akan memblokir peristiwa karena tidak ada kunci yang dikonfigurasi.

Pada dasarnya ApplicationInsights.configfile menimpa kode apa pun yang mengatur kunci instrumentasi, menghapus <instrumentationkey>key</instrumentationkey>di dalamnya akan memungkinkan Anda menggunakan kode untuk mengkonfigurasi kunci. Jika Anda menghapus file sepenuhnya itu tidak berhasil.

Berikut konfirmasinya: "Jika Anda ingin menyetel kunci secara dinamis - misalnya jika Anda ingin mengirim hasil dari aplikasi Anda ke sumber daya yang berbeda - Anda dapat menghilangkan kunci dari file konfigurasi, dan menyetelnya dalam kode."

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

Alberto Rivelli
sumber
1
Lihat blog ini bagaimana menggunakan ini dengan terpisahApplicationInsights.Debug/Release.config
Yahoo Serious
16

Saya telah memutuskan untuk menggunakan kedua pendekatan tersebut. Saya telah memindahkan InstrumentationKeyke Web.configdan itu akan digantikan oleh transformasi dari Web.Release.configatau Web.Debug.config. (jangan lupa untuk menghapusnya dari ApplicationInsights.configfile). Kemudian saya memanggil metode ini dariApplication_Start()

public static void RegisterTelemetryInstrumentationKey()
{
    if (string.IsNullOrWhiteSpace(WebConfigurationManager.AppSettings["TelemetryInstrumentationKey"])
    {
        TelemetryConfiguration.Active.DisableTelemetry = true;
    }
    else
    {
        TelemetryConfiguration.Active.InstrumentationKey = AppSettings.TelemetryInstrumentationKey;
    }
}
Sergey G.
sumber
ini sudah usang hari ini, bagaimana kita melakukannya hari ini dengan benar?
l --''''''--------- '' '' '' '' '' ''
15

Menjalankan aplikasi web ASP.NET Core 2.1 dengan Visual Studio 2017 (15.9.2) "Nonaktifkan Wawasan Aplikasi lokal untuk proyek web Asp.Net Core" tidak menghapus output di jendela Debug saya.

Namun menambahkan berikut ini ke Configure () di Startup.cs melakukan pekerjaan itu;

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

Perhatikan bahwa IsTracingDisabled adalah solusi utama , tetapi saya tetap menggunakan DisableTelemetry untuk ukuran yang baik! Selain itu, memiliki kedua garis di samping satu sama lain sangat membantu saat mencari referensi serupa antara proyek .NET Framework & .NET Core dalam solusi yang sama.

alv
sumber
2
ini sudah usang hari ini, bagaimana kita melakukannya hari ini dengan benar?
l --''''''--------- '' '' '' '' '' ''
11

Saya baru saja mengalami masalah yang sama.

Kami ingin mengontrol pengaturan di web.config jadi menambahkan kunci DisableAITelemetri dalam pengaturan aplikasi kami:

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

Dengan live dan demo build, kami tidak akan menyertakan nilai (sehingga defaultnya adalah false).

Kami kemudian dapat menyelesaikannya dengan menambahkan ini:

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

Permainan yang sedikit berbeda pada beberapa solusi lainnya. Taruh ini di global.asax Anda:

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

Ini akan mematikan keluaran debug wawasan aplikasi saat berjalan di bawah debugger, tetapi mengizinkannya di bawah skenario Ctrl + F5 dan membangun debug diterbitkan untuk menguji server

Josh
sumber
10

Dalam aplikasi ASP.NET Core, Anda dapat menambahkan berikut ini ke Startus.cs untuk mematikan Application Insights di lingkungan Pengembangan:

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

Tambahkan ini ke konstruktor, tepat setelah builder.AddApplicationInsightsSettings();perintah dan Anda tidak akan lagi melihat log AI yang menyumbat konsol debug Anda.

saluce
sumber
Tidak ... tidak ada bedanya bagi saya (dengan ASP.Net Core 2.1). Masih mendapatkan segunung pesan "Application Insights Telemetry" di jendela Output.
Mike Gledhill
7

Kami telah menemukan cara termudah untuk mencegahnya menelusuri log Debug sesederhana:

Extensibility.Implementation.TelemetryDebugWriter.IsTracingDisabled = True
Peter Jarrett
sumber
5

Microsoft.ApplicationInsights.AspNetCore Versi 2.1

services.AddApplicationInsightsTelemetry(options =>
{
    options.EnableDebugLogger = false;
});
JJS
sumber
Apakah ini seharusnya menyembunyikan Application Insights Telemetry (unconfigured)pesan dari panel Debug di Visual Studio - karena jika demikian tampaknya tidak berhasil :-(
Simon_Weaver
3
Saya tidak yakin pesan seperti apa itu. Saya yakin Anda sedang mencari untuk TelemetryDebugWriter.IsTracingDisabled = true;menghapusnya.
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
//...
}
SZL
sumber
1
ini sudah usang hari ini, bagaimana kita melakukannya hari ini dengan benar?
l --''''''--------- '' '' '' '' '' ''
0

Sejak .NET Core 3.1:

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

var telemetryClient = new TelemetryClient(telemetryConfiguration);   // Use this instance
TelemetryDebugWriter.IsTracingDisabled = true;
silkfire
sumber
2
Berikut dokumen untuk melakukan ini, termasuk mendapatkan TelemetryConfiguration melalui injeksi ketergantungan: docs.microsoft.com/en-us/azure/azure-monitor/app/…
Noah Stahl
0

Pada ASP.NET Core 3.1:

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

(di atas bisa dipanggil dari mana saja, tapi semakin cepat dalam siklus hidup aplikasi Anda, semakin baik).

Keduanya dapat digunakan bersama untuk menyembunyikan semua aktivitas Application Insights di kode Anda. Saya menjaga dengan #if DEBUGarahan untuk memastikan bahwa AppInsights tidak melakukan apa pun di mesin lokal saya, tetapi mengeluarkan peristiwa saat diunggah ke server dev Azure kami:

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

        TelemetryDebugWriter.IsTracingDisabled = true;
#endif
    }
}
Ian Kemp
sumber