Comment puis-je désactiver automatiquement les informations sur les applications lors de l'utilisation d'une configuration de débogage et l'activer uniquement lors de la publication?
Est-il possible de faire cela sans créer une autre clé d'instrumentation uniquement pour le débogage?
J'ai trackevent
instructions éparpillées dans tout le code, les enfermer dans une vérification de préprocesseur de débogage n'est pas une solution idéale.
Ma solution actuelle consiste à définir le Build Action
du fichier ApplicationInsights.config
sur None
pour qu'il ne soit pas copié dans le répertoire de sortie du projet, mais ce processus ne peut pas être automatisé. la configuration de construction active.
Il existe un mode développeur mais doit être modifié manuellement (s'il était possible de définir le fichier de configuration de manière conditionnelle, le problème résolu par instrumentationkey était également résolu). Voir http://apmtips.com/blog/2015/02/02/developer-mode/
Comme expliqué dans la question, ne déployez pas et ne déployez pas un ApplicationInsights.config sans que <instrumentationkey>key</instrumentationkey>
ne bloque la génération d'événements. Vous pouvez ensuite mettre la clé d'instrumentation dans le code (uniquement lors de la validation dans mon cas)
#if !DEBUG
Microsoft.ApplicationInsights.Extensibility.TelemetryConfiguration.Active.InstrumentationKey = "instrumentation key";
#endif
Chaque TelemetryClient
créée après cet appel aura la bonne clé et suivra les événements afin que vous n'ayez pas à changer le code dans tous les endroits. Ne pas appeler la méthode ci-dessus ou laisser le paramètre vide bloquera les événements car aucune clé n'est configurée.
Fondamentalement, le fichier ApplicationInsights.config
annule tout code définissant la clé d'instrumentation. En supprimant le <instrumentationkey>key</instrumentationkey>
, vous pourrez utiliser le code pour configurer la clé. Si vous supprimez complètement le fichier, cela ne fonctionnera pas.
Voici la confirmation: "Si vous souhaitez définir la clé de manière dynamique, par exemple si vous souhaitez envoyer les résultats de votre application à différentes ressources, vous pouvez omettre la clé du fichier de configuration et la définir à la place dans le code."
Vous pouvez essayer d'utiliser TelemetryConfiguration.DisableTelemetry Property Quelque chose comme ça ...
#if DEBUG
TelemetryConfiguration.Active.DisableTelemetry = true;
#endif
En plus des autres solutions, je suggérerais d'ajouter ce qui suit, disons au 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;
}
L'avantage de ceci est qu'elle ne nécessite aucune modification de la configuration et fonctionne mieux avec des outils tels que ReSharper, qui la comprendront mieux que les directives #
-.
Pour les projets ASP.NET Core, App Insights est activé par défaut, ce qui enregistre une tonne d'informations dans la fenêtre de débogage.
Pour le désactiver, allez dans "OUTILS -> Options -> Projets et solutions -> Projets Web" et cochez la case "Désactiver Application Insights local pour les projets Web Asp.Net Core".
Vous trouverez ci-dessous l'image permettant de désactiver les informations sur les applications locales.
Pour plus d'informations sur le sujet, vous pouvez voir le numéro officiel de github ici
J'ai décidé d'utiliser les deux approches. J'ai déplacé le InstrumentationKey
vers le Web.config
et il sera remplacé par la transformation de Web.Release.config
ou Web.Debug.config
. (n'oubliez pas de le supprimer du fichier ApplicationInsights.config
]). Ensuite, j'ai appelé cette méthode à partir de la Application_Start()
public static void RegisterTelemetryInstrumentationKey()
{
if (string.IsNullOrWhiteSpace(WebConfigurationManager.AppSettings["TelemetryInstrumentationKey"])
{
TelemetryConfiguration.Active.DisableTelemetry = true;
}
else
{
TelemetryConfiguration.Active.InstrumentationKey = AppSettings.TelemetryInstrumentationKey;
}
}
L'exécution d'une application Web ASP.NET Core 2.1 avec Visual Studio 2017 (15.9.2) n'entraînait pas d'effacement du résultat dans la fenêtre Débogage.
Cependant, le travail a été ajouté à Configure () dans Startup.cs;
if (_env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
TelemetryConfiguration.Active.DisableTelemetry = true;
TelemetryDebugWriter.IsTracingDisabled = true;
}
Notez que IsTracingDisabled était la solution clé, mais je suis parti dans DisableTelemetry pour faire bonne mesure! De plus, il est utile de disposer les deux lignes côte à côte lorsque vous recherchez des références similaires entre des projets .NET Framework et .NET Core dans la même solution.
Je viens d'avoir le même problème.
Nous voulions contrôler les paramètres dans le fichier web.config. Nous avons donc ajouté une clé DisableAITelemetry dans les paramètres de notre application:
<appSettings>
<add key="DisableAITelemetry" value="true" />
</appSettings>
Avec les versions live et démo, nous n'inclurons pas de valeur (par défaut, elle est false).
Nous pourrions alors le résoudre en ajoutant ceci:
bool disable;
string disableAiTelemetry = ConfigurationManager.AppSettings["DisableAITelemetry"];
bool.TryParse(disableAiTelemetry, out disable);
TelemetryConfiguration.Active.DisableTelemetry = disable;
Dans une application ASP.NET Core, vous pouvez ajouter ce qui suit au fichier Startus.cs pour désactiver Application Insights dans l'environnement de développement:
if (env.IsDevelopment()) {
TelemetryConfiguration.Active.DisableTelemetry = true;
}
Ajoutez ceci au constructeur, juste après la commande builder.AddApplicationInsightsSettings();
et vous ne verrez plus les journaux AI obstruer votre console de débogage.
Jeu légèrement différent sur certaines des autres solutions. Mettez ceci dans votre global.asax:
Microsoft.ApplicationInsights.Extensibility.Implementation.TelemetryDebugWriter.IsTracingDisabled = Debugger.IsAttached;
Il désactivera la sortie de débogage Insights de l'application lorsqu'il s'exécutera sous le débogueur, mais l'autorisera sous les scénarios Ctrl + F5 et les versions de débogage publiées pour tester les serveurs.
Nous avons trouvé le moyen le plus simple d'empêcher le traçage dans le journal de débogage est simple:
Extensibility.Implementation.TelemetryDebugWriter.IsTracingDisabled = True
Microsoft.ApplicationInsights.AspNetCore version 2.1
services.AddApplicationInsightsTelemetry(options =>
{
options.EnableDebugLogger = false;
});
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
#region Disable Application Insights debug informations
#if DEBUG
TelemetryConfiguration.Active.DisableTelemetry = true;
TelemetryDebugWriter.IsTracingDisabled = true;
#endif
#endregion
//...
}