Au secours, il me faut des logs !

Informatique
21 juin 2016 par Bastien
Pas de commentaires sur cet article

Vous utilisez Spring-mvc pour vos contrôleurs REST et Spring-security pour l’accès à votre couche de services ? Nous allons décrire comment ajouter rapidement des logs serveurs pour monitorer les actions de vos utilisateurs. Car enfin, le grand jour est arrivé : votre application est prête, elle est belle, elle est packagée, elle est déployée, et vous diffusez fièrement son adresse à une horde de nouveaux utilisateurs impatients.

Petit bémol, vous avez négligé d’analyser ce qu’allaient être les logs de votre application, et vous vous retrouvez impuissant devant certaines remontées de bugs utilisateurs.

Voici un petit pansement qui vous aidera tant que le nombre de vos utilisateurs n’est pas très gros et qu’ils ne sont pas trop gourmands.

Des logs via de la programmation par aspect

Si vous utilisez spring-mvc vous avez sûrement annoté toutes les classes de votre couche controlleur @RestController. Nous allons utiliser spring-aop pour intercepter leurs méthodes.

Commencez par créer un aspect comportant deux PointCuts pour intercepter d’une part les méthodes publiques, d’autres part les méthodes issues d’un bean spring annoté @RestController :

On continue avec un advice @Before dont le code sera exécuté juste avant nos controlleur. Nous allons utiliser le SecurityContextHolder de Spring-security pour récupérer l’utilisateur courant, puis construire la liste des arguments passés en paramètre.

Il vous suffit maintenant d’annoter votre classe de configuration Spring de @EnableAspectJAutoProxy pour activer les aspects, de configurer intelligemment logback et le tour est joué.

Le résultat : des utilisateurs tracés à la loupe

Suivant l’état de votre configuration logback, de vos méthodes toString() et de votre application, vous allez obtenir quelque chose de ce style :

C’est verbeux, mais vous allez pouvoir tracer vos utilisateurs de manière très (trop ?) fine.

Une fausse bonne idée !

Nous avons évidemment décrit ici un pansement qui fera l’affaire juste un temps. Quand votre application sera vraiment utilisée, cette technique aura le double désavantage de :

  • ralentir considérablement votre application
  • surcharger considérablement vos logs

Pour palier ces problèmes, vous pouvez utiliser les @Profile Spring, le rechargement à chaud de la configuration de logback, voire une intelligente combinaison des deux. Le mieux étant d’établir une vraie politique de logging dans vos applications.

Bastien Bastien
En vrac : dev, backend, java, devops, et bien d'autres… amateur de langages de programmation, j'attends avec impatience les succès annoncés de lisp et smalltalk dans l'industrie.
Commentaires
Soyez le premier à réagir sur cet article !

UP