Actuellemt entrain de coder la partie client-serveur de notre logiciel, je suis plongé dans l’utilisation de la class SocketHubAppender de Log4J. Cette class démarre un serveur sur un port TCP donné et attend des connexions de client log4j comme chainsaw. Lorsqu’un client se connecte, le hub fait suivre les messages de logs de l’application vers le client distant. Pour vous représenter le principe, imaginez un serveur web (la partie SocketHubAppender). Un client se connecte (SocketNode avec log4j) vers ce serveur. Le serveur va alors démarrer une thread qui fera suivre les events Log4J vers ce client. C’est très pratique puisqu’en ajoutant quelques lignes utilisant un SocketHubAppender sur n’importe quelle application, vous pouvez alors la monitorer à distance. Le gros problème que j’ai rencontré est que l’implémentation de SockeyHubAppender dans la version 1.2 de log4j est assez mauvaise. Je parle ici de la version officielle en juillet 05 au moment où j’écris cette note. Il faut savoir que dans votre code, si vous utilisez la class SocketHubAppender, celle-ci ne fonctionne que si vous appelez la fonction activateOption()… Par quel miracle le développeur qui a écrit cela n’a pas placé cet appel dans le constructeur ? Plus tard, lors de l’appel de la méthode cleanUp() nous aurons droit à une NullPointerException si la class SocketHubAppender n’avait pas été activé. Voulant résoudre ces problèmes j’ai téléchargé la version 1.3alpha-6 de Log4j. La première mauvaise surprise est que la fonction suivante a été retirée:
org.apache.log4j.xml.DOMConfigurator.configureAndWatch(String file)
Rappelez-vous dans un ancien post j’avais parlé du fait que Log4J peut recharger automatiquement sa configuration lorsque celle-ci est dans un fichier XML. Voir l’article ici. Cette méthode a été retiré du code sans être deprecated. Voir la version 1.68 de la class dans le repository CVS ici
Je me demande ce que l’équipe de Log4J bricole… Bref tout cela pour vous dire de ne pas passer pour l’instant à la version 1.3 qui est loin d’être stable.