[Logs] Loguer dans GrayLog depuis une application Windows Phone 7/8

Auteur du billet de blog : Nicolas Hilaire - Neotech Solutions

Nicolas Hilaire

Consultant .NET
  Publié le lundi 30 mai 2016

Artisan logiciel particulièrement intéressé par les technologies .NET. Polyvalent et curieux, je suis néanmoins à l'écoute des autres technologies du marché. MVP (Microsoft Most Valuable Professional) de 2007 à 2014, je suis également auteur d'un ouvrage pour apprendre le C#, à destination des débutants et de plusieurs MOOCs sur le C#, Windows Phone ou ASP.NET MVC...

Nous allons voir dans ce billet comment envoyer des logs à Graylog depuis un programme qui n’a pas de Log4Net, par exemple un Windows Phone.

Pour rappel, ce billet fait partie d’une série sur les logs que vous pouvez lire sur ces différents liens :

  1. Pourquoi avoir recours à des logs dans une application
  2. Utiliser Log4Net dans son application
  3. Ecrire un message de log utile
  4. Les appenders Log4Net
  5. Ecrire son propre appender Log4Net pour loguer dans MongoDB
  6. Centraliser les logs avec GrayLog
  7. Loguer dans GrayLog depuis une application Windows Phone
  8. Centralisation de logs avec ELK

 

Graylog est tellement bien que j’ai eu envie de m’en servir depuis une application Windows Phone. Le problème c’est que l’appender présenté dans le précédent billet n’est pas utilisable depuis une application Windows Phone. Qu’à cela ne tienne, Windows Phone sait envoyer de l’UDP, il suffit de bricoler un petit quelque chose pour lui faire envoyer des logs simplistes.

J’ai donc regardé le code de l’appender et en ai extrait les éléments qui pouvaient me servir pour Graylog. Je n’ai pas poussé l’exercice jusqu’à écrire un appender complet, mais vous devriez maintenant pouvoir y arriver.

La première chose à faire est de préparer la structure de l’objet à envoyer. Nous allons nous baser sur l’objet Log4Net et construire un objet GELF :

Puis, on a besoin de quelques méthodes pour notamment Gzip-er le message et gérer les timestamps correctement :

Enfin, on peut construire un objet Gelf avec des infos de Log et l’envoyer en UDP :

Il manque un peu de refactoring pour que ça soit complètement utilisable, mais je trouve sympa le fait de pouvoir loguer depuis mes applications Windows Phone 8.

Attention, les messages UDP envoyés sont perdus s’ils ne sont pas reçus. Il n’y a pas de mécanique de Retry et ce protocole ne permet pas de garantir la bonne réception des messages. Sur un téléphone qui peut potentiellement être coupé du réseau, on risque fortement de perdre des logs.

A noter que pour une application Windows Phone 8, les classes DatagramSocket & co se trouvent dans les espaces de noms Windows.Networking et Windows.Networking.Sockets;

Commentaires