Notre projet actuel consiste en une application ASP.NET ainsi que quelques applications de console plus petites. Nous utilisons Microsoft Office Application Insights pour la gestion des applications de l'application ASP.NET.
Maintenant, nous voulons intégrer Application Insights dans les applications de la console afin de pouvoir centraliser notre journalisation vers Azure.
Notre historique d'enregistrement est implémenté avec Log4Net. Après avoir configuré Application Insights Core et son App Log4Net correspondant dans l'application console, nous pouvons voir nos entrées de journal dans Azure comme prévu. Chaque message de journal provenant de l'application de console est envoyé à Azure, à l'exception des journaux qui obtiennent un objet supplémentaire de notre part. Par exemple nos messages du journal avec le niveau de gravité d'erreur qui contient les objets d'exception comme second paramètre:Application Insights n'envoie pas de message de journal Log4net avec l'objet d'exception ajouté à Azure
Log.Error("This looks like an error", ex);
Ces entrées du journal ne sont pas affichées du tout dans Azure. Ils ne sont affichés que lorsque vous mettez l'objet d'exception dans le message comme:
Log.Error($"This looks like an error. Exception: {ex}");
Il semble donc que il y a une limite de taille en ce qui concerne les objets d'exception de Log4Net mais pas le message réel? Si oui est-ce de quelque manière configurable? Parce que changer chaque 'Log.Error();' dans l'ensemble du projet n'est pas une option.
Notre fichier ApplicationInsights.config
:
<?xml version="1.0" encoding="utf-8"?>
<ApplicationInsights xmlns="http://schemas.microsoft.com/ApplicationInsights/2013/Settings">
<InstrumentationKey>[Our key]</InstrumentationKey>
<TelemetryChannel Type="Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel.ServerTelemetryChannel, Microsoft.AI.ServerTelemetryChannel"/>
<TelemetryProcessors>
<Add Type="Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel.AdaptiveSamplingTelemetryProcessor, Microsoft.AI.ServerTelemetryChannel">
<MaxTelemetryItemsPerSecond>5</MaxTelemetryItemsPerSecond>
<ExcludedTypes>Trace;Exception</ExcludedTypes>
</Add>
</TelemetryProcessors>
</ApplicationInsights>
Edit:
configuration Log4Net:
<!-- ... -->
<!-- Configuration of logfile and console appender -->
<!-- ... -->
<root>
<level value="ALL" />
<appender-ref ref="logfile" />
<appender-ref ref="console" />
<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>
Il n'y a pas de problème avec les autres appenders.
btw. Serilog fait la même chose - les événements contenant des exceptions sont envoyés en tant qu'exception et non en tant que trace - il est documenté ici: https://github.com/serilog/serilog-sinks-applicationinsights Je ne suis pas sûr que ce soit un bon comportement, le le message de l'événement de journal est perdu et seule une exception est envoyée à App Insights –