visual telemetry studio insights application c# asp.net azure log4net azure-application-insights

c# - telemetry - application insights visual studio



Log4Net con Application Insights (4)

Estoy intentando configurar mi sitio web azure asp.net para enviar rastreos de log4net a Azure Application Insights. Puedo ver en la página de mi consola azul las vistas, etc., por lo tanto, sé que está funcionando bien. También puedo ver rastros de log4net, cuando estoy configurado con un manejador de archivos, pero cuando configuro log4net para usar el manejador de conocimientos de la aplicación, no veo ninguna entrada de log4net en el panel de control de la aplicación, no hay errores ni advertencias en el momento de compilación o ejecución, solo No hay resultados en el salpicadero. He analizado el tráfico de red en Fiddler, y puedo ver que los datos de la página vista, etc., se envían a información de la aplicación, pero no al tráfico de seguimiento log4net, por lo que sospecho que este es un problema de configuración.

Por separado, he probado el TelemetryClient () en mi proyecto principal, y veo el tracetraffic sucesivamente en el panel. Sin embargo, esto no se ajusta a mi caso de uso, ya que TelemetryClient todavía no admite archivos DLL que no sean asp.net (es decir, mi negocio y la lógica de datos que se encuentran en archivos DLL separados).

¿Alguien ofrece alguna idea o consejo?

He instalado el paquete nuget para Microsoft.ApplicationInsights.Log4NetAppender.dll y estoy usando Microsoft.ApplicationInsights.0.13.2-build00132

Tengo lo siguiente en mi web.config según http://geekswithblogs.net/jakob/archive/2014/11/09/using-log4net-for-application-insights.aspx

<configuration> <configSections> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/> </configSections> <log4net> <root> <level value="ALL"/> <appender-ref ref="aiAppender"/> </root> <appender name="aiAppender" type="Microsoft.ApplicationInsights.Log4NetAppender.ApplicationInsightsAppender, Microsoft.ApplicationInsights.Log4NetAppender"> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%message%newline"/> </layout> </appender> </log4net> <configuration>


En mi caso (he agregado Application Insights a la aplicación web existente) además de Microsoft.ApplicationInsights.Log4NetAppender , he tenido que agregar Microsoft.ApplicationInsights.Web paquete Microsoft.ApplicationInsights.Web usando NuGet. Después de eso, en ApplicationInsights.config creado, debe especificar su InstrumentationKey.

Ej. De ApplicationInsights.config

<?xml version="1.0" encoding="utf-8"?> <ApplicationInsights xmlns="http://schemas.microsoft.com/ApplicationInsights/2013/Settings"> <InstrumentationKey>YOUR KEY HERE</InstrumentationKey> <TelemetryModules> ...



Su configuración de log4net es correcta; Lo he usado en un sitio web de prueba y funcionó. Además, como está viendo otros datos de AI en Fiddler, su AI también está configurada correctamente. Una cosa a tener en cuenta en estos casos es el atributo log4net.Config.XmlConfigurator. Es un atributo de nivel de ensamblaje y puede ser necesario que la configuración de log4net se lea correctamente.

[assembly: log4net.Config.XmlConfigurator(Watch = true)]

¿Puede por favor asegurarse de tenerlo especificado en su proyecto y volver a intentarlo?


También tuve algunos problemas con el envío de mis registros de Log4Net a AI en un sitio web de Sitecore. Sitecore tiene su propia implementación de Log4Net por lo que no funcionó con el paquete AI Nuget. He hecho mi propio Apprender en el que envío los registros a AI.

public class CustomLogFileAppender : SitecoreLogFileAppender { protected override void Append(LoggingEvent loggingEvent) { if (Sitecore.Context.Site != null ) { if(loggingEvent.Level == Level.FATAL) { AppsInsightsLogHelper.Critical(loggingEvent.RenderedMessage); } if (loggingEvent.Level == Level.ERROR) { AppsInsightsLogHelper.Error(loggingEvent.RenderedMessage); } if (loggingEvent.Level == Level.WARN) { AppsInsightsLogHelper.Warning(loggingEvent.RenderedMessage); } if(loggingEvent.Level == Level.INFO) { AppsInsightsLogHelper.Info(loggingEvent.RenderedMessage); } } base.Append(loggingEvent); } }

En sitecore.config:

<log4net> <appender name="LogFileAppender" type="namespace.CustomLogFileAppender, dll name"> ... </appender> </log4net>