Disabilita le informazioni dettagliate sull'applicazione nel debug


99

Come posso disabilitare automaticamente le informazioni dettagliate sull'applicazione quando si utilizza una configurazione di debug e abilitarla solo al rilascio?
È possibile farlo senza creare un'altra chiave di strumentazione solo per il debug?

Ho trackeventistruzioni sparse in tutto il codice, racchiuderle all'interno di un controllo del preprocessore di debug non è una soluzione ideale.

La mia soluzione attuale è quella di impostare il Build Actiondel ApplicationInsights.configfile Nonein modo che non è copiato directory di output del progetto, ma questo non è un processo che può essere automatizzato in base alla configurazione di generazione attiva.

Esiste una Modalità sviluppatore ma deve essere modificata manualmente (se fosse possibile impostare condizionatamente il file di configurazione, svuotando anche la chiave di strumentazione problema risolto). Vedi http://apmtips.com/blog/2015/02/02/developer-mode/

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

Risposte:


69

Puoi provare a usare TelemetryConfiguration.DisableTelemetry Property Qualcosa di simile in questo modo ..

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

Ho provato ad aggiungere questa affermazione appena prima WindowsAppInitializer.InitializeAsync();(ho provato anche dopo) ma il contatore degli eventi di insights dell'applicazione dello studio visivo è aumentato. Non sono stato in grado di vedere se questa sessione è stata effettivamente registrata nel portale Azure perché ci sono troppe sessioni e utenti. Proverò durante la notte.
Alberto Rivelli

Alberto, ho eseguito il test in questo modo: "code" public sealed partial class MainPage: Page {TelemetryClient telemetry; public MainPage () {this.InitializeComponent (); #if DEBUG TelemetryConfiguration.Active.DisableTelemetry = true; #endif telemetria = new TelemetryClient (); } private void button_Click (object sender, RoutedEventArgs e) {telemetry.TrackEvent ("Event Custom"); } "codice" .. e sembra funzionare. proverò anche altre pagine. vi terrò aggiornati
Abhijit Jana

Inoltre, dallo stesso Visual Studio, è possibile verificare se gli eventi di telemetria vengono inviati o meno. Ho appena pubblicato questo ieri Come ottenere il numero di eventi di Application Insights da Visual Studio 2015
Abhijit Jana

È quello che ho scritto, il contatore degli eventi dello studio visivo è aumentato.
Alberto Rivelli

2
Anche con DisableTelemetry impostato su true e una chiave di strumentazione vuota, i moduli di telemetria continueranno a raccogliere dati. I dati non verranno inviati, ma verranno raccolti. Vedi questo problema registrato in App Insights: github.com/Microsoft/ApplicationInsights-dotnet/issues/397 Se vuoi disabilitare l'output di debutto, puoi seguire i passaggi trovati su github.com/Microsoft/ApplicationInsights-dotnet/issues/310
Guillaume LaHaye

61

In aggiunta alle altre soluzioni suggerirei di aggiungere quanto segue diciamo a 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;
}

Il vantaggio di questo è che non necessita di modifiche alle configurazioni e funziona meglio con alcuni strumenti come ReSharper che lo capiranno meglio delle #-direttive.


1
Di solito distribuiamo la configurazione DEBUG nella fase di staging e la configurazione RELEASE nella produzione. Entrambi possono avere la propria telemetria abilitata. Quindi la tua modifica disabiliterà la telemetria per l'ambiente di staging.
Sergey G.

1
@Sergey suggerirei di definire una singola configurazione e di definire una variabile STAGING lì. In questo modo puoi distinguere meglio tra il debug a livello locale. Un'altra opzione potrebbe essere quella di definire un nuovo simbolo LOCAL e sostituirlo Conditionalnell'attributo-.
Alexander Schmidt

in genere abbiamo diverse stringhe di connessione DB, account di archiviazione e altre impostazioni per STAG e PROD (come ID app FB, account SendGrid, impostazioni dell'app, ecc.). Inoltre, localmente abbiamo l'emulatore di archiviazione di Azure e SQL Express locale. Quindi non c'è modo di lavorare con una singola configurazione. Abbiamo bisogno di 3 diverse configurazioni e quella locale dovrebbe avere la telemetria disabilitata.
Sergey G.

Puoi ancora definire un simbolo personalizzato su più di una delle tue configurazioni. Quindi invece di usare Conditional ("DEBUG"), potresti usare Conditional ("WHATEVER"). In alternativa, puoi ottenere un valore da appSettings e utilizzare le trasformazioni per spazzarlo via in ambienti non locali.
joelmdev

34

Per i progetti ASP.NET Core, App Insights è attivo per impostazione predefinita, che in realtà registra un sacco di informazioni nella finestra di debug.

Per disabilitarlo vai su "STRUMENTI -> Opzioni -> Progetti e soluzioni -> Progetti Web" e seleziona "Disabilita Application Insights locale per progetti web Asp.Net Core".

Di seguito è riportata l'immagine per disabilitare le informazioni dettagliate sulle app locali.

Immagine

Per maggiori informazioni sul problema puoi vedere il problema ufficiale di GitHub qui


22

Come spiegato nella domanda, non distribuire o distribuire un ApplicationInsights.config senza <instrumentationkey>key</instrumentationkey>che vengano generati eventi di blocco. È quindi possibile inserire la chiave della strumentazione in codice (solo al rilascio nel mio caso)

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

Ogni TelemetryClientcreato dopo questa chiamata avrà la chiave corretta e terrà traccia degli eventi in modo da non dover modificare il codice in tutti i posti. Non chiamare il metodo precedente o lasciare vuoto il parametro bloccherà gli eventi perché non è configurata una chiave.

Fondamentalmente il ApplicationInsights.configfile sovrascrive qualsiasi codice che imposta la chiave di strumentazione, rimuovendo l' <instrumentationkey>key</instrumentationkey>interno ti permetterà di usare il codice per configurare la chiave. Se rimuovi completamente il file non funziona.

Ecco la conferma: "Se si desidera impostare la chiave dinamicamente, ad esempio se si desidera inviare risultati dalla propria applicazione a risorse diverse, è possibile omettere la chiave dal file di configurazione e impostarla invece nel codice."

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


1
Vedi questo blog come usarlo con un separatoApplicationInsights.Debug/Release.config
Yahoo Serious

16

Ho deciso di utilizzare entrambi gli approcci. Ho spostato il InstrumentationKeyin Web.confige sarà sostituito dalla trasformazione da Web.Release.configo Web.Debug.config. (non dimenticare di rimuoverlo dal ApplicationInsights.configfile). Quindi ho chiamato questo metodo daApplication_Start()

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

questo è obsoleto oggi, come lo facciamo oggi correttamente?
l --''''''--------- '' '' '' '' '' '11

15

L'esecuzione di un'applicazione Web ASP.NET Core 2.1 con Visual Studio 2017 (15.9.2) "Disabilita Application Insights locale per progetti Web Asp.Net Core" non ha cancellato l'output nella finestra di debug.

Tuttavia, l'aggiunta di quanto segue a Configure () in Startup.cs ha funzionato;

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

Si noti che IsTracingDisabled era la soluzione chiave , ma ho lasciato DisableTelemetry per buona misura! Inoltre, avere entrambe le righe una accanto all'altra è utile quando si cercano riferimenti simili tra progetti .NET Framework e .NET Core nella stessa soluzione.


2
questo è obsoleto oggi, come lo facciamo oggi correttamente?
l --''''''--------- '' '' '' '' '' '11

11

Ho appena avuto lo stesso problema.

Volevamo controllare l'impostazione nel web.config, quindi abbiamo aggiunto una chiave DisableAITelemetry nelle impostazioni della nostra app:

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

Con le build live e demo, non includeremo un valore (in modo che il valore predefinito sia false).

Potremmo quindi risolverlo aggiungendo questo:

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

10

Gioco leggermente diverso su alcune delle altre soluzioni. Metti questo nel tuo global.asax:

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

Disattiverà l'output di debug delle informazioni dettagliate dell'app durante l'esecuzione nel debugger, ma lo consentirà in scenari Ctrl + F5 e nelle build di debug pubblicate sui server di prova


10

In un'applicazione ASP.NET Core è possibile aggiungere quanto segue a Startus.cs per disattivare Application Insights nell'ambiente di sviluppo:

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

Aggiungilo al costruttore, subito dopo il builder.AddApplicationInsightsSettings();comando e non vedrai più i registri AI che intasano la tua console di debug.


No ... non ha fatto alcuna differenza per me (con ASP.Net Core 2.1). Ricevi ancora una montagna di messaggi di "telemetria di Application Insights" nella finestra di output.
Mike Gledhill

7

Abbiamo trovato il modo più semplice per impedire che venga tracciato nel registro di debug è semplice come:

Extensibility.Implementation.TelemetryDebugWriter.IsTracingDisabled = True

5

Microsoft.ApplicationInsights.AspNetCore versione 2.1.0

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

Questo dovrebbe nascondere i Application Insights Telemetry (unconfigured)messaggi dal pannello Debug in Visual Studio - perché in tal caso non sembra funzionare :-(
Simon_Weaver

3
Non sono sicuro di quale sia questo tipo di messaggio. Credo che tu stia cercando TelemetryDebugWriter.IsTracingDisabled = true;di rimuoverli.
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
questo è obsoleto oggi, come lo facciamo oggi correttamente?
l --''''''--------- '' '' '' '' '' '11

0

A partire da .NET Core 3.1:

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

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

2
Ecco i documenti per eseguire questa operazione, incluso il recupero di
Noah Stahl

0

A partire da ASP.NET Core 3.1:

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

(quanto sopra può essere richiamato da qualsiasi luogo, ma prima nel ciclo di vita dell'applicazione, meglio è).

Entrambi possono essere usati insieme per sopprimere tutte le attività di Application Insights nel codice. #if DEBUGProteggo con una direttiva per garantire che AppInsights non faccia nulla sulla mia macchina locale, ma emetta eventi quando viene caricato sul nostro server di sviluppo di Azure:

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

        TelemetryDebugWriter.IsTracingDisabled = true;
#endif
    }
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.