On continue la série #NPotW avec une présentation du module Log4JS, un portage JavaScript du célèbre Log4J. Pour ceux qui ne connaissent pas ce dernier, il s’agit d’une API de journalisation. Autrement dit, un outil qui vous permettra d’apporter une gestion de logs à vos développements.

Mais ce module ne s’arrête pas là, puisqu’en plus de mettre de la couleur dans votre console (ce qui est déjà très joli pratique), il vous permettra notamment de gérer les niveaux de log et d’ajouter des Appenders ; qui vous permettront par exemple de vous notifier par mail les plantages.

En pratique

Comme toujours, NPM permet d’installer ce module en toute simplicité. Puisqu’à terme tout nos projets devraient l’utiliser, on rajoute l’option -g :

1
$ sudo npm install -g log4js

On va maintenant pouvoir tester ce package en commençant par le configurer.

Configuration

La configuration de Log4JS s’effectue très simplement, à tel point que ça ne laisse plus aucune excuse pour ne pas le mettre en place dans chacun de ses projets utilisant ce cher Node.js ! Elle se décompose en deux étapes : la mise en place des Appenders et des Loggers.

Les Appenders

Comme dit plus haut, Log4JS fonctionne à l’aide d’Appenders. Ce sont ces Appenders qui vous permettront de choisir le type de sortie (console, fichier log, mail, etc.). Il peut y en avoir autant que vous le souhaitez ; et ceux-ci se configurent de la sorte :

1
2
log4js.loadAppender('file');
log4js.addAppender(log4js.appenders.file('out.log'), 'myfilelogger');

Nous avons ainsi chargé puis ajouté un Appender prenant comme sortie un fichier nommé out.log. À noter que la console est chargée par défaut. Nul besoin donc de l’ajouter.

On peut retrouver quelques spécificités en fonction de l’Appender choisi (une taille maximale pour les fichiers, la configuration d’un SMTP pour l’envoi de mail, etc.). Le wiki vous dira tout sur le sujet.

Les Loggers

Arrive ensuite le Logger. Le logger permet d’écrire sur la sortie de l’appender en fonction d’un level selectionné.

Vous suivez ? Voyons un exemple de configuration type pour un projet utilisant Log4JS :

1
2
3
4
5
6
7
var log4js = require('log4js');

log4js.loadAppender('file');
log4js.addAppender(log4js.appenders.file('out.log'), 'myfilelogger');

var logger = log4js.getLogger('myfilelogger');
logger.setLevel('WARN');

Cette configuration permettra d’écrire dans le fichier out.log en interceptant les messages ayant un niveau supérieur ou égal à WARN.

Pour information, il existe six niveaux de log, qui sont (du moins important au plus inquiétant) :

  • Trace,
  • Debug,
  • Info,
  • Warn,
  • Error,
  • Fatal.

Let’s go

Une fois qu’on en est là, il ne nous reste plus qu’à utiliser notre logger de la sorte :

1
logger.error('Mon message d'erreur.');

Voici un exemple exploitant tous les niveaux de log :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
var log4js = require('log4js');

log4js.loadAppender('file');
log4js.addAppender(log4js.appenders.file('out.log'), 'myfilelogger');

var logger = log4js.getLogger('myfilelogger');
logger.setLevel('DEBUG');


logger.trace('Message trace.');
logger.debug('Message debug.');
logger.info('Message info.');
logger.warn('Message warn.');
logger.error('Message error.');
logger.fatal('Message fatal.');

Ce programme provoquera la sortie suivante :


Sortie DEBUG.

On retrouve en effet tous les messages excepté Message trace ; puisque le niveau selectionné est DEBUG.

On peut bien entendu avoir plusieurs loggers. Donc plusieurs sorties, selon plusieurs niveaux.

En conclusion

Vous l’aurez compris, Log4JS est un outil très puissant et largement configurable. Il est rapide à mettre en place et vous ne pourrez que vous féliciter de l’avoir fait une fois votre projet utilisé en production. Les console.log();, ça va cinq minutes !

Je vous invite également à jeter un oeil dans les sources des Appenders. Vous verrez qu’ils se limitent à quelques lignes de code et qu’ils sont très simples à appréhender. Un article sur le sujet est dans les tuyaux : que diriez-vous de recevoir un SMS en cas d’erreur fatale ?


J’espère que cette seconde édition de #NPotW vous a plu, je vous souhaite un bon vendredi, et je vous dit à très bientôt ici même !