Logging Log4J avec CXF


Dans sa configuration par défaut, Apache CXF utilise le système de trace du JDK (java.util.logging). Comme je l'ai déjà fait pour Tomcat, je préfère utiliser Log4J , voire LogBack lorsque c'est possible. Ici, nous verrons comment il est possible d'orienter facilement les traces de CXF vers Log4J.

Intégration par fichier XML

La première solution consiste à ajouter un fichier META-INF/cxf/org.apache.cxf.Logger dans un endroit accessible par un classloader. Cet endroit peut être la racine d'un fichier jar ou ear, ou le répertoire WEB-INF/classes/ d'un fichier war (ce qui donne un fichier WEB-INF/classes/META-INF/cxf/org.apache.cxf.Logger !). Ce fichier ne contient qu'une ligne qui contient le nom qualifié de la bonne classe de logger :

 # META-INF/cxf/org.apache.cxf.Logger 
 org.apache.cxf.common.logging.Log4jLogger 

Intégration par variable d'environnement

Une solution plus simple encore, et moins intrusive que la solution précédente, consiste à ajouter une variable d'environnement Java au lancement du programme qui utilise CXF, soit en paramètre du programme, soit, pour JBoss ou Tomcat, en variable JAVA_OPTS :

 JAVA_OPTS=-Dorg.apache.cxf.Logger=org.apache.cxf.common.logging.Log4jLogger

Le défaut de cette solution, c'est que la modification n'est pas intégrée à l'application elle-même, mais à un script elle-même, ce qui peut être gênant dans le cas d'une application JavaEE.

Remarque : cette solution a été testée avec CXF 2.