4 votes

Comment configurer Tomcat 9 pour enregistrer via Log4j2

Comment rediriger les journaux internes de Tomcat 9 (catalina et localhost) vers Log4j2?

Alors qu'il existe de nombreux guides disponibles pour les anciennes versions de Tomcat et Log4j, je n'ai rien trouvé de "complet" concernant Tomcat 9 et Log4j2; la documentation d'Apache Tomcat 9 renvoie aux "instructions fournies par le framework de journalisation alternatif", et la documentation d'Apache Log4j indique (noms des jars en 2. corrigés):

Log4j peut être utilisé comme cadre de journalisation pour Apache Tomcat. Cette prise en charge est implémentée automatiquement en incluant les jars log4j-api, log4j-core et log4j-appserver dans le classpath de démarrage. Un fichier nommé log4j2-tomcat.xml, log4j2-tomcat.json, log4j2-tomcat.yaml, log4j2-tomcat.yml ou log4j2-tomcat.properties doit également être placé dans le classpath de démarrage. Cela se fait le plus facilement en:

  1. Créant un ensemble de répertoires dans le répertoire principal de catalina nommé log4j2/lib et log4j2/conf.
  2. Plaçant log4j-api-2.12.0.jar, log4j-core-2.12.0.jar et log4j-appserver-2.12.0.jar dans le répertoire log4j2/lib.
  3. Créant un fichier nommé log4j2-tomcat.xml, log4j2-tomcat.json, log4j2-tomcat.yaml, log4j2-tomcat.yml ou log4j2-tomcat.properties dans le répertoire log4j2/conf.
  4. Créer ou modifier setenv.sh dans le répertoire bin de tomcat pour inclure CLASSPATH=$CATALINA_HOME/log4j2/lib/*:$CATALINA_HOME/log4j2/conf

Mais que faut-il mettre dans ce fichier de configuration log4j2-tomcat.*?

4voto

Christoph Points 409

J'ai trouvé un exemple de fichier de propriétés dans la documentation d'Apache Tomcat 7, mais comme cela était destiné à être utilisé avec Log4j 1.x, j'ai dû l'adapter à la syntaxe du fichier de propriétés Log4j2. Voici le résultat :

# 'status' fait référence aux messages de journalisation provenant de Log4j2 lui-même
monitorInterval = 30
status = warn

property.loglevel.catalina = info
property.loglevel.localhost = info

property.layoutPattern.catalina = %d %-5p [%t] %-22.22c{1} %m%n
property.layoutPattern.localhost = %d %-5p [%t] %-30.30c{1} %m%n

# Faites basculer les journaux une fois par mois en utilisant la politique CronTrigger.

property.fileDatePattern.catalina = %d{yyyy-MM}
property.fileDatePattern.localhost = %d{yyyy-MM}

property.cronTriggerSchedule.catalina = 0 0 0 1 * ?
property.cronTriggerSchedule.localhost = 0 0 0 1 * ?

## Appenders

# Remarque : - Pas besoin de spécifier 'appender = CATALINA, LOCALHOST, CONSOLE'
#            car ces identifiants ne contiennent pas de caractères '.'.
#         - Les identifiants de sous-composant 'policies' et 'cron' sont arbitrairement
#           choisis ; le type réel est spécifié via l'attribut 'type'.
#         - 'DirectWriteRolloverStrategy' est utilisé automatiquement car aucun 'fileName' n'est spécifié.

appender.CATALINA.type = RollingFile
appender.CATALINA.name = RollingFile-CATALINA
appender.CATALINA.filePattern = ${sys:catalina.base}/logs/catalina.${fileDatePattern.catalina}.log
appender.CATALINA.layout.type = PatternLayout
appender.CATALINA.layout.pattern = ${layoutPattern.catalina}
appender.CATALINA.policies.type = Policies
appender.CATALINA.policies.cron.type = CronTriggeringPolicy
appender.CATALINA.policies.cron.schedule = ${cronTriggerSchedule.catalina}
appender.CATALINA.policies.cron.evaluateOnStartup = true
appender.CATALINA.filePermissions = rw-r-----
appender.CATALINA.fileOwner = tomcat
appender.CATALINA.fileGroup = adm

appender.LOCALHOST.type = RollingFile
appender.LOCALHOST.name = RollingFile-LOCALHOST
appender.LOCALHOST.filePattern = ${sys:catalina.base}/logs/localhost.${fileDatePattern.localhost}.log
appender.LOCALHOST.layout.type = PatternLayout
appender.LOCALHOST.layout.pattern = ${layoutPattern.localhost}
appender.LOCALHOST.policies.type = Policies
appender.LOCALHOST.policies.cron.type = CronTriggeringPolicy
appender.LOCALHOST.policies.cron.schedule = ${cronTriggerSchedule.localhost}
appender.LOCALHOST.policies.cron.evaluateOnStartup = true
appender.LOCALHOST.filePermissions = rw-r-----
appender.LOCALHOST.fileOwner = tomcat
appender.LOCALHOST.fileGroup = adm

# Décommentez si vous souhaitez conserver la journalisation vers catalina.out après la prise en charge de Log4j2.

#appender.CONSOLE.type = Console
#appender.CONSOLE.name = STDOUT
#appender.CONSOLE.layout.type = PatternLayout

## Configurez quels enregistreurs journalisent vers quels appenders

rootLogger.level = ${loglevel.catalina}
rootLogger.appenderRef.CATALINA.ref = RollingFile-CATALINA
#rootLogger.appenderRef.stdout.ref = STDOUT

# Ici, l'identifiant contient des caractères '.', nous devons donc spécifier la liste.
loggers = org.apache.catalina.core.ContainerBase.[Catalina].[localhost]

logger.org.apache.catalina.core.ContainerBase.[Catalina].[localhost].name = LOCALHOST
logger.org.apache.catalina.core.ContainerBase.[Catalina].[localhost].level = ${loglevel.localhost}
logger.org.apache.catalina.core.ContainerBase.[Catalina].[localhost].appenderRef.LOCALHOST.ref = RollingFile-LOCALHOST

La principale raison pour moi d'utiliser Log4j2 était de pouvoir effectuer une rotation mensuelle des journaux, mais vous pouvez facilement tout ajuster selon vos préférences, même sans redémarrer Tomcat.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X