Comment initialiser log4j correctement ?

Après avoir ajouté log4j à mon application, j'obtiens le résultat suivant chaque fois que j'exécute mon application :

log4j:WARN Aucun appender n'a pu être trouvé pour le logger (slideselector.facedata.FaceDataParser).
log4j:WARN Veuillez initialiser correctement le système log4j.

Il semble que cela signifie qu'un fichier de configuration est manquant. Où doit se trouver ce fichier de configuration et quel est le contenu de départ ?

J&#8217utilise simplement Java pour développer une application de bureau. Donc pas de serveur web, etc...

Solution

Log4j recherche par défaut un fichier appelé log4j.properties ou log4j.xml dans le classpath. Vous pouvez contrôler le fichier qu'il utilise pour s'initialiser en définissant les propriétés du système comme décrit [ici][1] (cherchez la section "Default Initialization Procedure&quot ;).

Par exemple :

java -Dlog4j.configuration=customName ....

Log4j recherchera un fichier appelé customName dans le classpath.

Si vous rencontrez des problèmes, je trouve utile d'activer log4j.debug :

-Dlog4j.debug

Il affichera dans System.out de nombreuses informations utiles sur le fichier utilisé pour s'initialiser, les loggers/appenders configurés et comment, etc.

Le fichier de configuration peut être un fichier de propriétés java ou un fichier xml. Voici un exemple de format de fichier de propriétés extrait de [la page de documentation introductive de log4j][1] :

log4j.rootLogger=debug, stdout, R

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

# Pattern to output the caller's file name and line number.
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n

log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=example.log

log4j.appender.R.MaxFileSize=100KB
# Keep one backup file
log4j.appender.R.MaxBackupIndex=1

log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n

[1] : http://logging.apache.org/log4j/1.2/manual.html

Commentaires (5)

Trouvez un log4j.properties ou log4j.xml en ligne qui a un appender racine, et mettez-le dans votre classpath.

### direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout
log4j.rootLogger=debug, stdout

permettra d'ouvrir un journal dans la console. Je préfère enregistrer dans un fichier pour que vous puissiez enquêter par la suite.

log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.maxFileSize=100KB
log4j.appender.file.maxBackupIndex=5
log4j.appender.file.File=test.log
log4j.appender.file.threshold=debug
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
log4j.rootLogger=debug,file

bien que pour les applications de journalisation verbeuse 100KB doit généralement être augmenté à 1MB ou 10MB, en particulier pour le débogage.

Personnellement, je configure plusieurs enregistreurs, et je règle l'enregistreur racine sur un niveau d'avertissement ou d'erreur au lieu de déboguer.

Commentaires (0)

Dans quel environnement développez-vous ? Utilisez-vous Apache Tomcat ?

log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.target=System.out
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d{yyyyMMdd HH:mm:ss.SSS} [[%5p] %c{1} [%t]] %m%n

J'ai une propriété comme celle-ci dans une de mes applications Java.

Commentaires (0)