2017-07-13 2 views
1

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.

+0

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 –

Répondre

0

I figured it out.Ce qui a causé le problème est que dès que vous ajoutez un objet d'exception à l'une des méthodes d'exploitation forestière de Log4Net:

Log.Error(message, exception); 
Log.Warn(message, exception); 
Log.Info(message, exception); 

L'entrée du journal specifc n'est pas traitée comme trace mais comme exception dans application Insights. Ainsi, l'ajustement du filtre dans l'onglet Application Insights dans Azure pour afficher également exceptions était suffisant. Maintenant, je suis également capable de voir les entrées Log.Error(message, exception) dans Azure.

Je ne sais pas pourquoi cela est géré comme ça, parce que cela rend le traitement des journaux plus complexes pour des logiciels tiers (Par exemple: Les exceptions ne sont pas un champ un message explicite dans Insights application, etc. .).

+0

avez-vous trouvé une solution pour envoyer les journaux en tant que trace plutôt qu'exception? J'ai le même problème que vous. Les exceptions sont consignées dans Application Insights mais la partie de message est perdue. –

+0

Malheureusement pas. – croxy

+1

J'ai résolu ce problème en envoyant 2 événements à App Insights - Message avec exception sera envoyé séparé. Message en tant que trace et exception en tant qu'exception Dans App Insights, vous pouvez joindre des traces avec des exceptions par Operation_ID et obtenir le résultat souhaité. –

0

Vous devez configurer log4net, vous ne faites que configurer Application Insights.

les étapes à suivre:

  • configure log4net
  • ajouter une demande Appender aperçu de laisser log4net journal pour un aperçu de l'application

Ensuite, je regardais la version que vous utilisez. Je vois que vous utilisez. Net core, et il pourrait être le paquet a été construit contre une autre version de l'application insights dll. Essayez d'obtenir la dernière version de Microsoft.ApplicationInsights.Log4NetAppender.

Microsoft.ApplicationInsights.Log4NetAppender latest version

+0

Log4Net est déjà configuré. S'il vous plaît Jetez un oeil à mon édition. – croxy

+0

Installé est la dernière version stable (actuellement 2.2.0) de * Log4NetAppender *. Ainsi que la dernière version stable (2.4.0) pour * ApplicationInsights Core *. – croxy