KissLogger, logguez en toute simplicité
Le projet test Dios Mio que j’utilisais comme application de test comporte entre autres une interface en ligne de commande (CLI) pour laquelle j’ai évidemment eu besoin d’écrire des logs. Mes besoins étaient extrêmement simples : logguer dans un fichier aux différents niveaux habituels (ERROR
, WARN
, …). Utiliser une librairie externe pour si peu semblait inutile, j’ai donc écrit une simple classe Java qui remplit cette fonction : KissLogger
.
Un autre besoin est apparu par la suite. Je souhaitais disposer immédiatement après le lancement de l’application CLI d’un logger et ceci avant même d’avoir traité les options passées par l’utilisateur en paramètre de ligne de commande ou même d’avoir lu le fichier de configuration. Or ce n’est qu’une fois ces deux actions effectuées que la destination final des lignes de log est connue. J’ai donc modifié cette classe pour qu’elle écrive initialement dans un buffer en mémoire le temps de traiter les options passées en ligne de commande et de lire le fichier de configuration (ou n’importe quelle autre action d’ailleurs). KissLogger
propose la méthode switchDestination(PrintStream destination)
qui permet par la suite de basculer la destinaton des lignes de log à run time
. Celle-ci vide alors le buffer dans la destination spécifiée et configure le logguer pour utiliser ce fichier à l’avenir.
Le déroulement suivant est donc possible :
Ce qui donnera les lignes de log suivantes dans le fichier logFinalDest
:
2012/09/24 18:27:32 INFO - Application starting...
2012/09/24 18:27:32 INFO - User specified an alternate log dest
2012/09/24 18:27:32 INFO - User specified an alternate config file.
2012/09/24 18:27:32 WARN - Log destination from configuration file will be overriden
2012/09/24 18:27:32 INFO - Reading configuration file conf-perso.conf
...
2012/09/24 18:27:32 DEBUG - Application done.
La classe KissLogger
permet aussi de changer le format de la date affichée en tête de ligne dans les logs, de changer le niveau de log à run time
et dispose d’une méthode qui loggue une stacktrace
complète.
Cette classe n’est pas géniale en soi, elle est même finalement très bête mais elle remplit complètement son office et le tout en quelques dizaines de lignes de code. C’est la définition même du Keep It Simple Stupid!
“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.” – Sir Tony Hoare