log4j2 spécifiez le chemin relatif vers tomcat home dir pour FileAppender

j'essaie de configurer log4j2 pour mon serveur tomcat qui tourne localement. Je ne suis pas en mesure de raccorder les logs à un emplacement relatif à l'installation de tomcat.

si je spécifie un chemin absolu, il fonctionne. Si j'utilise un chemin relatif, il sort à l'emplacement de System.getProperty("user.dir").

Mais quand j'essaie d'utiliser ${catalina.home} ou ${catalina.base} ça ne marche pas. Si je sors ces deux propriétés du système au démarrage, elles sont définies et pointées à l'endroit approprié.

Aussi,

  • Tomcat 7.0.26
  • servlet 2.5
  • log4j2.0 bêta 8
  • nous utilisons slf4j avec log4j2 derrière.
  • j'ai configuré tous les loggers pour qu'ils soient async à travers la variable d'environnement -DLog4jContextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector.

mon sentiment est que Tomcat pourrait ne pas être complètement initialisé quand il traite le log4j2.xml? Toutes les idées seraient grandement appréciés!

Voici mon log4j2.xml:

<?xml version="1.0" encoding="UTF-8"?>
<configuration status="debug" name="LoggingConfig"> 
  <appenders>
    <FastFile name="ALog" fileName="${catalina.home}/logs/test.log" immediateFlush="true" append="true">
      <PatternLayout>
        <pattern>%d %p %c{1.} [%t] %m%n</pattern>
      </PatternLayout>
    </FastFile>
  </appenders>

  <loggers>
    <logger name="a.namespace.dir" level="info" additivity="false">
      <appender-ref ref="ALog"/>
    </logger>

    <root level="info">
      <appender-ref ref="ALog"/>
    </root>
  </loggers>

</configuration>

à partir de Catalina.

2013-07-31 11:22:00,313 DEBUG Calling createAppender on class org.apache.logging.log4j.core.appender.FastFileAppender for element FastFile with params(fileName="${catalina.home}/logs/test.log", append="true", name="ALog", immediateFlush="true", suppressExceptions="null", PatternLayout(%d %p %c{1.} [%t] %m%n), null, advertise="null", advertiseURI="null", Configuration(LoggingConfig))

2013-07-31 11:22:00,315 DEBUG Starting FastFileManager ${catalina.home}/logs/test.log

2013-07-31 11:22:00,316 DEBUG Calling createAppenders on class org.apache.logging.log4j.core.config.plugins.AppendersPlugin for element appenders with params(appenders={ALog})

2013-07-31 11:22:00,317 DEBUG Generated plugins in 0.000016000 seconds

2013-07-31 11:22:00,318 DEBUG Calling createAppenderRef on class org.apache.logging.log4j.core.config.AppenderRef for element appender-ref with params(ref="ALog", level="null", null)

2013-07-31 11:22:00,320 DEBUG Calling createLogger on class org.apache.logging.log4j.core.config.LoggerConfig for element logger with params(additivity="false", level="info", name="a.namespace.dir", includeLocation="null", appender-ref={org.apache.logging.log4j.core.config.AppenderRef@6e8ef177}, properties={}, Configuration(LoggingConfig), null)

2013-07-31 11:22:00,321 DEBUG Calling createAppenderRef on class org.apache.logging.log4j.core.config.AppenderRef for element appender-ref with params(ref="ALog", level="null", null)

2013-07-31 11:22:00,322 DEBUG Calling createLogger on class org.apache.logging.log4j.core.config.LoggerConfig$RootLogger for element root with params(additivity="null", level="info", includeLocation="null", appender-ref={org.apache.logging.log4j.core.config.AppenderRef@6a8ef455}, properties={}, Configuration(LoggingConfig), null)

2013-07-31 11:22:00,323 DEBUG Calling createLoggers on class org.apache.logging.log4j.core.config.plugins.LoggersPlugin for element loggers with params(loggers={a.namespace.dir, root})
35
demandé sur Ahmed Ashour 2013-07-31 22:29:56

2 réponses

j'ai résolu mon propre problème. Pour les propriétés du système, vous devez préfixer les variables sys:.

<FastFile name="ALog" fileName="${sys:catalina.home}/logs/test.log" immediateFlush="true" append="true">
  <PatternLayout>
    <pattern>%d %p %c{1.} [%t] %m%n</pattern>
  </PatternLayout>
</FastFile>

Je L'ai trouvé après avoir relu cette partie de la documentation: http://logging.apache.org/log4j/2.x/manual/configuration.html#PropertySubstitution

98
répondu Moemars 2016-08-09 09:27:18

après de nombreuses heures à essayer de résoudre mes propres problèmes avec la journalisation des fichiers log4j2 avec Tomcat, j'ai trouvé une autre cause possible. Espérons que cela sauvera quelqu'un d'autre un certain temps sur la route!

J'avais mon répertoire Tomcat localisé dans /Library/Tomcat. À la fin de wit, J'ai essayé de réinstaller Tomcat, cette fois en plaçant le répertoire de travail dans /usr/local avec un lien vers /Library/Tomcat. Ceci, ainsi que la suggestion de Moemars d'inclure le sys le préfixe a résolu mes problèmes de journalisation.

0
répondu Pat Putnam 2017-04-29 16:48:43