Hata ayıklamada uygulama öngörülerini devre dışı bırakın


100

Bir hata ayıklama yapılandırması kullanırken uygulama içgörülerini otomatik olarak nasıl devre dışı bırakabilir ve bunu yalnızca yayınlandığında nasıl etkinleştirebilirim?
Bunu sadece hata ayıklama için başka bir enstrümantasyon anahtarı oluşturmadan yapmak mümkün müdür? Kodun her tarafına dağılmış ifadelerim

var trackevent, bunları bir hata ayıklama önişlemcisi denetimi içine almak ideal bir çözüm değil.

Benim şu anki çözüm ayarlamaktır Build Actionarasında ApplicationInsights.configdosyanın Noneo projenin çıkış dizinine kopyalanan değil ki, ama bu aktif yapı yapılandırmasına göre otomatik hale getirilebilir bir süreç değildir.

Bir Geliştirici Modu vardır ancak manuel olarak değiştirilmesi gerekir (yapılandırma dosyasını koşullu olarak ayarlamak mümkün olsaydı, enstrümantasyon anahtarı çözülmüş sorunu da boşaltın). Bkz. Http://apmtips.com/blog/2015/02/02/developer-mode/

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

Yanıtlar:


71

TelemetryConfiguration.DisableTelemetry Özelliğini kullanmayı deneyebilirsiniz. Bunun gibi bir şey ..

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

Bu ifadeyi hemen önce eklemeye WindowsAppInitializer.InitializeAsync();çalıştım (sonra da denedim) ancak görsel stüdyo uygulaması içgörüleri olay sayacı arttı. Bu oturumun Azure portalında etkin bir şekilde kaydedilip kaydedilmediğini göremedim çünkü çok fazla oturum ve kullanıcı var. Gece deneyeceğim.
Alberto Rivelli

Alberto, ben böyle test ettim - 'kod' genel mühürlenmiş kısmi sınıf MainPage: Sayfa {TelemetryClient telemetri; public MainPage () {this.InitializeComponent (); #if hata ayıklama TelemetryConfiguration.Active.DisableTelemetry = true; #endif telemetri = new TelemetryClient (); } private void button_Click (nesne gönderen, RoutedEventArgs e) {telemetry.TrackEvent ("Olay Özel"); } 'kod' .. ve çalışıyor gibi görünüyor. başka sayfalar da deneyeceğim. sizi güncel tutacak
Abhijit Jana

Ayrıca, Visual Studio'nun kendisinden, telemetri olaylarının gönderilip gönderilmediğini kontrol edebilirsiniz. Sadece bu yestarday yayınlanmıştır Nasıl Visual Studio 2015 den Uygulama Insights olayların sayısını almak için
Abhijit Jana

Yazdığım buydu, görsel stüdyo etkinlikleri sayacı arttı.
Alberto Rivelli

2
DisableTelemetry true olarak ayarlanmış ve enstrümantasyon anahtarı boş olsa bile, telemetri modülleri veri toplamaya devam edecektir. Veriler gönderilmeyecek, ancak toplanacaktır. App Insights'ta günlüğe kaydedilen bu sorunu görün: github.com/Microsoft/ApplicationInsights-dotnet/issues/397 İlk çıktıyı devre dışı bırakmak istiyorsanız, github.com/Microsoft/ApplicationInsights-dotnet/issues/310 adresinde bulunan adımları takip edebilirsiniz.
Guillaume LaHaye

61

Diğer çözümlere ek olarak aşağıdakileri de eklemenizi öneririm 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;
}

Bunun avantajı, yapılandırmalarda değişiklik gerektirmemesi ve ReSharper gibi bazı araçlarla daha iyi çalışmasıdır, bu da onu #yönergelerden daha iyi anlayacaktır .


1
Genellikle DEBUG yapılandırmasını aşamaya ve RELEASE yapılandırmasını üretime dağıtırız. Her ikisinde de KENDİ telemetrisi etkinleştirilebilir. Bu nedenle, yaptığınız değişiklik, hazırlık ortamı için telemetriyi devre dışı bırakacaktır.
Sergey G.

1
@Sergey Tek bir konfigürasyon tanımlamayı ve orada bir STAGING değişkeni tanımlamayı öneririm. Böylece, yerel olarak hata ayıklamayı daha iyi ayırt edebilirsiniz. Başka bir seçenek, yeni bir LOKAL sembolü tanımlamak ve Conditional-öznitelikte onu değiştirmek olabilir .
Alexander Schmidt

tipik olarak farklı DB bağlantı dizilerimiz, depolama hesaplarımız ve STAG ve PROD için diğer ayarlarımız vardır (FB uygulama kimliği, SendGrid hesabı, uygulama ayarları vb.). Dahası - yerel olarak Azure depolama öykünücümüz ve yerel SQL Express'imiz var. Yani tek bir konfigürasyonla çalışmanın bir yolu yoktur. 3 farklı konfigürasyona ihtiyacımız var ve yerel olanın telemetri devre dışı bırakılmış olması gerekir.
Sergey G.

Yine de birden fazla konfigürasyonunuzda özel bir sembol tanımlayabilirsiniz. Daha sonra Koşullu ("HATA AYIKLAMA") yerine Koşullu ("HER ŞEY") yapabilirsiniz. Alternatif olarak, appSettings'den bir değer alabilir ve yerel olmayan ortamlarda onu uçurmak için dönüşümleri kullanabilirsiniz.
joelmdev

34

ASP.NET Core projeleri için, App Insights varsayılan olarak AÇIK durumdadır, bu da aslında bir ton bilgiyi hata ayıklama penceresine kaydeder.

Devre dışı bırakmak için "ARAÇLAR -> Seçenekler -> Projeler ve Çözümler -> Web Projeleri" ne gidin ve "Asp.Net Core web projeleri için yerel Uygulama Öngörülerini Devre Dışı Bırak" seçeneğini işaretleyin.

Aşağıda, yerel uygulama içgörülerini devre dışı bırakma resmi bulunmaktadır.

Resim

Sorunla ilgili daha fazla bilgi için resmi github sorununu buradan görebilirsiniz.


22

Soruda açıklandığı gibi, bir ApplicationInsights.config <instrumentationkey>key</instrumentationkey>dosyasını, blok olayları oluşturulmadan dağıtmamak veya dağıtmamak . Daha sonra enstrümantasyon anahtarını koda koyabilirsiniz (sadece benim durumumda serbest bırakıldığında)

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

TelemetryClientBu aramadan sonra oluşturulan her biri doğru anahtara sahip olacak ve olayları izleyecek, böylece kodu her yerde değiştirmeniz gerekmeyecek. Yukarıdaki yöntemi çağırmamak veya parametreyi boş bırakmak, yapılandırılmış bir anahtar olmadığından olayları engelleyecektir.

Temel olarak ApplicationInsights.configdosya, enstrümantasyon anahtarını ayarlayan herhangi bir kodu geçersiz kılar, <instrumentationkey>key</instrumentationkey>içini kaldırmak anahtarı yapılandırmak için kodu kullanmanıza izin verir. Dosyayı tamamen kaldırırsanız çalışmaz.

İşte onay: "Anahtarı dinamik olarak ayarlamak istiyorsanız - örneğin, uygulamanızdan sonuçları farklı kaynaklara göndermek istiyorsanız - anahtarı yapılandırma dosyasından çıkarabilir ve bunun yerine kodda ayarlayabilirsiniz."

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


1
Bunun ayrı bir şekilde nasıl kullanılacağına bakınApplicationInsights.Debug/Release.config
Yahoo Serious

16

Her iki yaklaşımı da kullanmaya karar verdim. Taşınacak olan InstrumentationKeyetmek Web.configve 'e dönüşüm ile değiştirilecektir Web.Release.configveya Web.Debug.config. ( ApplicationInsights.configdosyadan kaldırmayı unutmayın ). Sonra bu yöntemiApplication_Start()

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

bu bugün modası geçmiş, bugün bunu nasıl düzgün yapacağız?
l --''''''--------- '' '' '' '' '' '11 Ekim 2019

15

Visual Studio 2017 (15.9.2) ile bir ASP.NET Core 2.1 web uygulamasını çalıştırmak "Asp.Net Core web projeleri için yerel Uygulama Öngörülerini devre dışı bırak" hata ayıklama penceremdeki çıktıyı temizlemedi.

Ancak Startup.cs içindeki Configure () öğesine aşağıdakileri eklemek işi yaptı;

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

IsTracingDisabled'ın anahtar çözüm olduğunu unutmayın , ancak iyi önlem için DisableTelemetry'yi bıraktım! Ayrıca, aynı çözümde .NET Framework ve .NET Core projeleri arasında benzer referanslar ararken her iki satırın yan yana olması yararlıdır.


2
bu bugün modası geçmiş, bugün bunu nasıl düzgün yapacağız?
l --''''''--------- '' '' '' '' '' '11 Ekim 2019

11

Ben de aynı sorunu yaşadım.

Web.config dosyasındaki ayarı kontrol etmek istedik, bu nedenle uygulama ayarlarımıza bir DisableAITelemetri anahtarı ekledik:

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

Canlı ve demo derlemelerde, bir değer eklemeyeceğiz (böylece varsayılan olarak yanlış olur).

Daha sonra bunu ekleyerek çözebiliriz:

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

10

Diğer çözümlerin bazılarında biraz farklı oyun. Bunu global.asax'ınıza koyun:

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

Hata ayıklayıcı altında çalışırken uygulama içgörüleri hata ayıklama çıktısını kapatır, ancak Ctrl + F5 senaryoları altında izin verir ve sunucuları test etmek için yayınlanan hata ayıklama yapıları


10

Bir ASP.NET Core uygulamasında, Geliştirme ortamında Application Insights'ı kapatmak için Startus.cs dosyasına aşağıdakileri ekleyebilirsiniz:

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

builder.AddApplicationInsightsSettings();Bunu yapıcıya komutun hemen arkasına ekleyin ve artık hata ayıklama konsolunuzu tıkayan AI günlüklerini görmeyeceksiniz.


Hayır ... benim için herhangi bir fark yaratmadı (ASP.Net Core 2.1 ile). Yine de Çıktı penceresinde bir yığın "Application Insights Telemetri" mesajı alın.
Mike Gledhill

7

Hata Ayıklama günlüğüne girmesini engellemenin en kolay yolunu bulduk:

Extensibility.Implementation.TelemetryDebugWriter.IsTracingDisabled = True

5

Microsoft.ApplicationInsights.AspNetCore Sürüm 2.1

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

Bunun Application Insights Telemetry (unconfigured)Visual Studio'daki Hata Ayıklama panelinden mesajları gizlemesi mi gerekiyor - çünkü eğer öyleyse işe yaramıyor gibi görünüyor :-(
Simon_Weaver

3
Bu tür bir mesajın ne olduğundan emin değilim. Bunları TelemetryDebugWriter.IsTracingDisabled = true;kaldırmak istediğinize inanıyorum .
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
bu bugün modası geçmiş, bugün bunu nasıl düzgün yapacağız?
l --''''''--------- '' '' '' '' '' '11 Ekim 2019

0

.NET Core 3.1'den beri:

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

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

2
Bağımlılık ekleme yoluyla TelemetryConfiguration'ı alma da dahil olmak üzere bunu yapmak için belgeler: docs.microsoft.com/en-us/azure/azure-monitor/app/…
Noah Stahl,

0

ASP.NET Core 3.1 itibariyle:

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

(yukarıdakiler herhangi bir yerden çağrılabilir, ancak uygulamanızın yaşam döngüsü ne kadar erken olursa o kadar iyidir).

Her ikisi de kodunuzdaki tüm Application Insights etkinliğini bastırmak için birlikte kullanılabilir. #if DEBUGAppInsights'ın yerel makinemde hiçbir şey yapmamasını, ancak Azure dev sunucumuza yüklendiğinde olayları yaymasını sağlamak için bir yönerge ile korunuyorum:

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

        TelemetryDebugWriter.IsTracingDisabled = true;
#endif
    }
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.