Petit délire de ce week-end : coder un Appender pour Log4J afin de publier vers votre compte Twitter des messages de log4j. Bref quelques heures plus tard, le temps de faire un projet propre, je vous ai mis le tout en ligne il y a quelques minutes. Vous trouverez en anglais des explications complètes sur la page dédiée, le code source, les ressources et un exemple d’utilisation.
Le principe est simple : après avoir configuré un nouvel appender, puis un logger générique, vous pouvez alors envoyer des messages de log4j avec du code classique de votre application:
// The TWITTER Loger is defined in the Log4j.xml Logger twitterLogger=Logger.getLogger("TWITTER"); // This message won't be published cause we configured // the appender to ERROR Level twitterLogger.debug("This message should not be published"); // This message will be published // Using standard Twitter syntax, you'll send me // a small helloWorld ! twitterLogger.error("Hello @Letouilleur ! it works !");
Vous devez simplement configurer un appender « TwitterAppender » soit dans votre fichier log4j.xml, soit dans un fichier log4j.properties ou directement en Java.
Dans cet exemple, nous configurons un appender avec un compte Twitter valide et un mot de passe :
log4j.xml :
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE log4j:configuration SYSTEM "/Users/nicolas/Dev/TwitterAppender/src/test/resources/configuration/log4j.dtd"> <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="true"> ... ... <appender name="TWITTER_APPENDER" class="com.letouilleur.express.TwitterAppender"> <!-- true or false, I recommend true to avoid locking your app while we publish to twitter--> <param name="useAsynchronous" value="true"/> <!-- Set here a valid twitter userId screename that we will use to authenticate --> <param name="screenId" value="YOUR TWITTER USERID HERE"/> <!-- Set here its password --> <param name="screenPassword" value="YOUR TWITTER PASSWORD HERE"/> <!-- If you want to test and you do not want to really publish messages, set this to true --> <param name="fakePublishing" value="false"/> </appender>
Nous configurons ensuite un logger « TWITTER. A noter que le nom n’a aucuns importances, vous pouvez même ajouter une référence à l’appender TwitterAppender à des loggers existants dans votre application, et la rendre ainsi capable de « twitter » !
<!-- Configure a TWITTER logger that will be use from my sample class TwitterAppenderTestLog4jXML --> <!-- Any message with level ERROR that is send to Logger "TWITTER" will be published --> <logger name="TWITTER"> <level value="ERROR"/> <appender-ref ref="TWITTER_APPENDER"/> </logger> ... ... // other configuration params... ... </log4j:configuration>
Et à quoi cela sert-il ?
Ce système permet à votre application de publier son status. L’idée que j’ai serait de créer un compte dédié pour votre application. Appelons par exemple « primeweb » ce compte Twitter. Nous pourrions alors imaginer que notre système publie son status sur sa page Twitter. A 06h00 du matin « primeweb » génère des rapports financiers. Il pourrait ainsi annoncer fièrement « 345 rapports générés, aucunes erreurs signalées » par exemple…
J’imagine aussi qu’en retour nous pourrions répondre et twitter avec notre compte robot. Je pourrai par exemple envoyer un message direct à « primeweb » en écrivant « Salut mon gars, tu peux #relancer_batch_asie_as_of_20090404 stp ? merci et ensuite #notifier_Letouilleur_si_erreurs ». Bref un système simple pour discuter avec votre logiciel…
Je suis certain que ce bon vieux primeweb rêve de twitter comme un fou et de nous raconter tout ce qu’il fait. Primeweb c’est le projet sur lequel je travaille en ce moment à la GrandeBanqueFrançaiseQueJePeuxPasCiter…
Rendez-vous sur la page « TwitterAppender » pour tester.
Le code est en license BSD, libre, avec les sources.
J’utilise l’excellente API Twitter4J pour envoyer mes twits.
Intéressant. Pour ce genre de choses il m’est déjà arrivé d’utiliser la messagerie instantanée (XMPP via Smack).