Bon aujourd'hui, je ne vais pas vous infliger un grand discours philosophique. Je voulais juste partager ma petite découverte de la semaine: perf4j, dont la philosophie se résume à cette phrase:

Perf4J is to System.currentTimeMillis() as log4j is to System.out.println()

L'idée est donc qu'il doit être aussi facile d'introduire du code de profiling que du code de logging. Donc à la manière que Logger.getLogger, nous allons récupérer un StopWatch dont l'implémentation dépend de votre framework de logging favoris. L'idée est de générer des traces de performances enregistrées par votre système de log habituel. Du coup le système est entièrement configurable au même endroit que le logging. Si jamais vous trouvez ce code trop envahissant, nativement il est possible d'utiliser aspectJ ou SpringAOP pour le tisser à votre place.

Perf4j est ensuite livré avec un outil en ligne de commande capable d'analyer ces traces, et de proposer des aggregats et des graphes. En poussant la configuration un peu plus loin, on peut même du coup avoir des informations de performances en temps réel via jmx/servlet/etc etc.

Perf4j a mon sens ne remplace pas complètement un bon vieux profiler quand il s'agit d'identifier les problèmes de performance d'une application, mais son extrême simplicité et sa capacité à fournir des statistiques sur le code même en production m'ont assez plu.

J'avais un petit besoin de profiling, et j'ai été heureux de trouver un outil simple pour ça.