c# - vea - Deshabilitar información de aplicaciones en depuración
para habilitar la depuración de aplicaciones asp net es necesario (12)
Acabo de tener el mismo problema.
Queríamos controlar la configuración en web.config, así que agregamos una clave DisableAITelemetry dentro de la configuración de nuestra aplicación:
bool disable;
string disableAiTelemetry = ConfigurationManager.AppSettings["DisableAITelemetry"];
bool.TryParse(disableAiTelemetry, out disable);
TelemetryConfiguration.Active.DisableTelemetry = disable;
Con las compilaciones en vivo y de demostración, no incluiremos un valor (por lo que el valor predeterminado es falso).
Entonces podríamos resolverlo agregando esto:
if (_env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
TelemetryConfiguration.Active.DisableTelemetry = true;
TelemetryDebugWriter.IsTracingDisabled = true;
}
¿Cómo puedo deshabilitar información de aplicaciones automáticamente cuando uso una configuración de depuración y habilitarla solo en el lanzamiento?
¿Es posible hacer esto sin crear otra clave de instrumentación solo para la depuración?
Tengo instrucciones de
trackevent
dispersas por todo el código, encerrarlas dentro de una comprobación de preprocesador de depuración no es una solución ideal.
Mi solución actual es establecer la
Build Action
de
Build Action
del archivo
ApplicationInsights.config
en
None
para que no se copie en el directorio de salida del proyecto, pero este no es un proceso que pueda automatizarse en función de la configuración de compilación activa.
Hay un modo de desarrollador pero debe cambiarse manualmente (si fue posible configurar condicionalmente el archivo de configuración, vaciando también el problema resuelto de la clave de instrumentación). Ver http://apmtips.com/blog/2015/02/02/developer-mode/
Al ejecutar una aplicación web ASP.NET Core 2.1 con Visual Studio 2017 (15.9.2), "Deshabilitar las estadísticas de aplicaciones locales para proyectos web Asp.Net Core" no borró el resultado en mi ventana de depuración.
Sin embargo, agregar lo siguiente a Configure () en Startup.cs hizo el trabajo;
<appSettings>
<add key="DisableAITelemetry" value="true" />
</appSettings>
Tenga en cuenta que IsTracingDisabled fue la solución clave , ¡pero lo dejé en DisableTelemetry por si acaso! Además, tener ambas líneas una al lado de la otra es útil cuando se buscan referencias similares entre .NET Framework y .NET Core proyectos en la misma solución.
Como se explica en la pregunta, no desplegar o desplegar un ApplicationInsights.config sin que
<instrumentationkey>key</instrumentationkey>
bloquee la generación de eventos.
Luego puede poner la clave de instrumentación en el código (solo en el lanzamiento en mi caso)
#if !DEBUG
Microsoft.ApplicationInsights.Extensibility.TelemetryConfiguration.Active.InstrumentationKey = "instrumentation key";
#endif
Cada
TelemetryClient
creado después de esta llamada tendrá la clave correcta y rastreará eventos para que no tenga que cambiar el código en todos los lugares.
No llamar al método anterior o dejar el parámetro vacío bloqueará los eventos porque no hay una clave configurada.
Básicamente, el archivo
ApplicationInsights.config
anula cualquier código que establezca la clave de instrumentación, eliminando la
<instrumentationkey>key</instrumentationkey>
dentro de él le permitirá usar el código para configurar la clave.
Si elimina el archivo por completo, no funciona.
Aquí está la confirmación: "Si desea configurar la clave dinámicamente, por ejemplo, si desea enviar los resultados de su aplicación a diferentes recursos, puede omitir la clave del archivo de configuración y establecerla en el código".
Como una adición a las otras soluciones, sugeriría agregar lo siguiente, digamos 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;
}
La ventaja de esto es que no necesita ningún cambio en las configuraciones y funciona mejor con algunas herramientas como ReSharper que lo entenderán mejor que
#
-directives.
En una aplicación ASP.NET Core, puede agregar lo siguiente a Startus.cs para desactivar Application Insights en el entorno de Desarrollo:
if (env.IsDevelopment()) {
TelemetryConfiguration.Active.DisableTelemetry = true;
}
Agregue esto al constructor, justo después del
builder.AddApplicationInsightsSettings();
comando y ya no verá los registros de AI obstruyendo su consola de depuración.
He decidido usar ambos enfoques.
He movido la
InstrumentationKey
a
Web.config
y será reemplazada por la transformación de
Web.Release.config
o
Web.Debug.config
.
(no olvide eliminarlo del archivo
ApplicationInsights.config
).
Luego llamé a este método desde
Application_Start()
public static void RegisterTelemetryInstrumentationKey()
{
if (string.IsNullOrWhiteSpace(WebConfigurationManager.AppSettings["TelemetryInstrumentationKey"])
{
TelemetryConfiguration.Active.DisableTelemetry = true;
}
else
{
TelemetryConfiguration.Active.InstrumentationKey = AppSettings.TelemetryInstrumentationKey;
}
}
Hemos encontrado que la forma más fácil de evitar que se rastree en el registro de depuración es tan simple como:
Extensibility.Implementation.TelemetryDebugWriter.IsTracingDisabled = True
Juego ligeramente diferente en algunas de las otras soluciones. Ponga esto en su global.asax:
Microsoft.ApplicationInsights.Extensibility.Implementation.TelemetryDebugWriter.IsTracingDisabled = Debugger.IsAttached;
Desactivará la información de depuración de las estadísticas de la aplicación cuando se ejecute bajo el depurador, pero lo permitirá en escenarios Ctrl + F5 y compilaciones de depuración publicadas en servidores de prueba
Microsoft.ApplicationInsights.AspNetCore Versión 2.1
services.AddApplicationInsightsTelemetry(options =>
{
options.EnableDebugLogger = false;
});
Para los proyectos de ASP.NET Core, App Insights está ACTIVADO de forma predeterminada, lo que en realidad registra una tonelada de información en la ventana de depuración.
Para deshabilitarlo, vaya a "HERRAMIENTAS -> Opciones -> Proyectos y soluciones -> Proyectos web" y marque "Deshabilitar Application Insights locales para proyectos web Asp.Net Core".
A continuación se muestra la imagen para deshabilitar la información de la aplicación local.
Para obtener más información sobre el problema, puede ver el problema oficial de github here
Puede intentar usar TelemetryConfiguration.DisableTelemetry Property Algo así de esta manera ...
#if DEBUG
TelemetryConfiguration.Active.DisableTelemetry = true;
#endif
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
#region Disable Application Insights debug informations
#if DEBUG
TelemetryConfiguration.Active.DisableTelemetry = true;
TelemetryDebugWriter.IsTracingDisabled = true;
#endif
#endregion
//...
}