Comment initialiser log4j correctement

Le warning "log4j:WARN Please initialize the log4j system properly" apparaît quand l'application démarre sans qu'aucun fichier de configuration ait été trouvé. log4j tombe alors sur une configuration par défaut minimaliste et inutilisable en pratique.

Le problème typique

log4j:WARN No appenders could be found for logger (com.example.App).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.

log4j cherche log4j.properties ou log4j.xml sur le classpath. Si aucun n'est trouvé, il vous laisse ce warning.

Solution — un fichier log4j.properties minimal

Créez src/main/resources/log4j.properties :

# Logger racine : niveau INFO, sortie stdout
log4j.rootLogger=INFO, stdout

# Configuration de l'appender stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p [%c] - %m%n

# Niveau plus verbeux pour votre code
log4j.logger.com.example=DEBUG

Une fois sur le classpath (Maven le met automatiquement depuis src/main/resources), log4j le détecte au démarrage et le warning disparaît.

Variante XML — plus flexible

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
  <appender name="stdout" class="org.apache.log4j.ConsoleAppender">
    <layout class="org.apache.log4j.PatternLayout">
      <param name="ConversionPattern" value="%d %-5p [%c] - %m%n"/>
    </layout>
  </appender>
  <root>
    <priority value="INFO"/>
    <appender-ref ref="stdout"/>
  </root>
</log4j:configuration>

Forcer un emplacement avec -D

Si le fichier n'est pas sur le classpath, utilisez la propriété système :

java -Dlog4j.configuration=file:/chemin/log4j.properties -jar app.jar

Passer à log4j 2 (recommandé)

log4j 1.x n'est plus maintenu depuis 2015. Préférez log4j 2 ou SLF4J + Logback pour tout nouveau projet :

<dependency>
  <groupId>org.apache.logging.log4j</groupId>
  <artifactId>log4j-core</artifactId>
  <version>2.24.3</version>
</dependency>

Le fichier de configuration devient log4j2.xml, avec une syntaxe différente (recherchez la documentation officielle).

Pattern de log utile

JetonSignification
%dDate et heure
%pNiveau (DEBUG, INFO, …)
%cNom du logger (classe)
%tThread
%mMessage
%nSaut de ligne

Avec un fichier de configuration bien placé, le warning disparaît et vos logs deviennent exploitables.