Séparer les logs des modules avec Log4j

Dans des applications complexes, il peut être intéressant de séparer les logs des différents modules dans des fichiers distincts afin d'améliorer leur lecture.

Je vais présenter ici un exemple de fichier log4j.properties utilisé pour réguler la destination et le niveau de sortie des logs selon leur type, dans une application basée sur Camel et la librairie GeoTools :

# Set root logger level to DEBUG and its direct appenders to camel and console.
log4j.rootLogger=DEBUG, camel, console

log4j.logger.org.geotools=DEBUG, geoToolsAppender
# Set GeoTools JDBC appender (for SQL showing)
log4j.logger.org.geotools.jdbc=DEBUG, geoToolsJDBCAppender
# To avoid duplication in camel's logs
log4j.additivity.org.geotools.jdbc=false
log4j.additivity.org.geotools=false

log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n
log4j.appender.console.Threshold=INFO

log4j.appender.camel=org.apache.log4j.FileAppender
log4j.appender.camel.File=camel.log
log4j.appender.camel.layout=org.apache.log4j.PatternLayout
log4j.appender.camel.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n
log4j.appender.camel.Threshold=DEBUG

log4j.appender.geoToolsAppender=org.apache.log4j.FileAppender
log4j.appender.geoToolsAppender.File=geotools.log
log4j.appender.geoToolsAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.geoToolsAppender.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n
log4j.appender.geoToolsAppender.Threshold=DEBUG

log4j.appender.geoToolsJDBCAppender=org.apache.log4j.FileAppender
log4j.appender.geoToolsJDBCAppender.File=geotoolsjdbc.log
log4j.appender.geoToolsJDBCAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.geoToolsJDBCAppender.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n
log4j.appender.geoToolsJDBCAppender.Threshold=DEBUG

# To avoid annoying polling logs
log4j.logger.org.apache.camel.component.file.FileConsumer=ERROR

Dans cet exemple, quatre logs sont mis en place :

  • console : pour diriger certaines informations vers la console Eclipse.
  • camel : pour créer un log spécifique utilisé par l'application Camel (appelé par org.apache.commons.logging.Log LOGGER = org.apache.commons.logging.LogFactory.getLog("camel");).
  • geoToolsAppender : un logger spécifique utilisé par un module de l'application (GeoTools) : toutes les sorties issues des classes à l'intérieur des packages org.geotools.* utiliseront l'appender geoToolsAppender
  • geoToolsJDBCAppender : même chose que le point précédent, spécifique au package org.geotools.jdbc (pour faire apparaître notamment des requêtes SQL)

Les instructions log4j.additivity... servent à indiquer à Log4j de ne pas dupliquer les sorties des logs en question dans le log principal (rootLogger dirigé vers "camel").

Voilà tout!

Sources :


Fichier(s) joint(s) :

0 commentaires: