2017-07-03 2 views
0

Je cours une application spring-bootwar dans tomcat8 et utilise log4j2 pour la journalisation. Problème:Comment configurer le dossier log4j2 dans tomcat?

  • les journaux se trouvent dans le mauvais répertoire
  • les journaux ne tournent pas correctement

log4j2.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<Configuration> 
     <Appenders> 
     <RollingRandomAccessFile name="APP" fileName="logs/my-application.log" 
           filePattern="logs/archive/my-application-%d{yyyy-MM-dd}.log"> 
      <PatternLayout pattern="%d %p %c{1.}: %m%n" charset="UTF-8" /> 
      <Policies> 
       <TimeBasedTriggeringPolicy modulate="true"/> 
      </Policies> 
     </RollingRandomAccessFile> 
    </Appenders> 

    <Loggers> 
     <Root level="DEBUG"> 
      <AppenderRef ref="APP" /> 
     </Root> 
    </Loggers> 
</Configuration> 

pom.xml:

<dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-log4j2</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.logging.log4j</groupId> 
     <artifactId>log4j-web</artifactId> 
    </dependency> 

Résultat: les journaux se trouvent dans /var/log/tomcat8/my-application.log. Les archives dans /var/log/tomcat8/my-application.log.gz

Ceci est vraiment étrange. Les noms de fichier d'enregistreur corrects sont récupérés. Mais maintenant les dossiers.

Question: pourquoi mon dossier /logs n'est-il pas pris en compte? Et pourquoi le nom d'archive compressé ne contient-il pas l'horodatage?

Sidenote: exécuter l'application en tant que jar dans mon idée fonctionne parfaitement. Il crée automatiquement un dossier /logs sous la racine de classpath. Et tous les fichiers sont correctement déplacés à /archive à minuit, avec horodatage!

Mais pourquoi cela ne fonctionne-t-il pas tel quel dans Tomcat?

Répondre

0

trouvé la cause:

Si le fileName démarre sans /, il est pris par rapport à catalina.base=/var/lib/tomcat8 Dans ce dossier est un lien symbolique /logs. ainsi un fileName="logs/myapp" suivra ce lien symbolique. Qui pointe vers /var/log/tomcat8. Par conséquent, tous les fichiers sont écrits dans ce dossier. Par conséquent, tous les fichiers sont écrits dans ce dossier. De plus, certains paramètres par défaut de Tomcat logrotate semblent prendre tous les fichiers dans ce dossier et les compresser automatiquement. Donc, log4j n'a aucune chance d'appliquer le logrotate.

Solution: juste définir et sous-chemin supplémentaire pour le nom de fichier. Je:

fileName="logs/logs/my-application.log" 
filePattern="logs/logs/my-app..." 

Ceci déplacera les fichiers journaux à:

/var/log/tomcat8/logs 
/var/log/tomcat8/logs/archive