Logging

Il est important qu’une librairie ayant pour objectif de s’intégrer comme brique logicielle à un système existant offre des traces d’exécution précises et concises, adaptées à la situation (développement, qualification, production) tout en s’adaptant au système de log adopté par le logiciel maître sans être intrusif, c’est-à-dire sans nécessiter de librairie dépendante particulière.

Pour respecter ce cahier des charges, MRules a fait le choix de développer une interface de log interne, redirigeant les messages vers une interface de log externe.

Les interfaces de log externes acceptées couvrent la majorité des applications. Il s’agit, dans l’ordre de priorité, de slf4j, log4j et de la librairie intégrée au jdk java.util.logging. Aucune configuration n’est nécessaire : une recherche des Logger disponibles est effectuée à l’initialisation.

Concernant la verbosité des logs, les différents niveaux (DEBUG, INFO, WARN et ERROR) donneront des informations différentes, correspondant aux besoins des équipes devant les interpréter.

Enfin, tous les logs d’exécution d’une instance de RuleSet donnée sont regroupés au sein d’un même logger, afin de pouvoir retracer aisément les différentes étapes d’une compilation ou d’une exécution.

La compilation et l’exécution ont deux loggers séparés afin de pouvoir configurer leur niveau de log indépendamment. Les noms des loggers sont construits ainsi par défaut :

  • com.massa.mrules.set.COMPILE.<Nom du RuleSet>
  • com.massa.mrules.set.EXECUTE.<Nom du RuleSet>

Le logger étant porté par le Contexte, il est parfaitement possible de surcharger son nom par défaut pour une exécution donnée afin de la tracer précisément.

Voici un extrait de configuration log4j permettant de tracer le déroulement de l’exécution d’une instance particulière du moteur de règles en cas de besoin :