Tomcat 7 ne produit pas de sortie de journal vers catalina.out sur RHEL7

9

J'ai un serveur RHEL7 avec Apache Tomcat 7.0 installé et après une récente mise à jour de RHEL7.1, toute la journalisation dans $ {catalina.base} /logs/catalina.out a été arrêtée. Cependant, je reçois les journaux dans journalctl.

Si je tape journalctl -u tomcat, j'obtiens la journalisation. Existe-t-il un moyen pour moi de me connecter également à catalina.out?

cat /usr/share/tomcat/logs/catalina.out
no output

journalctl -u tomcat

Aug 20 10:07:14 server.example.com server[26435]: at org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:549)
Aug 20 10:07:14 server.example.com server[26435]: at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:455)
Aug 20 10:07:14 server.example.com server[26435]: at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
Aug 20 10:07:14 server.example.com server[26435]: at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
Aug 20 10:07:14 server.example.com server[26435]: at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
Aug 20 10:07:14 server.example.com server[26435]: at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
Aug 20 10:07:14 server.example.com server[26435]: at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
...
xterrez
la source
Avez-vous vérifié que la variable "catalina.base" est correctement définie?
VGe0rge
Oui, le catalina.base est correctement défini. jinfo -sysprops 26435 | grep catalina.base catalina.base = /usr/share/tomcat
xterrez
Vous pouvez essayer de voir que le fichier est ouvert par le processus tomcat. Essayez destat /usr/share/tomcat/logs/catalina.out
VGe0rge
Non, ce processus tomcat n'utilise pas le fichier catalina.out. stat /usr/share/tomcat/logs/catalina.out File: ‘/usr/share/tomcat/logs/catalina.out’ Size: 0 Blocks: 0 IO Block: 4096 regular empty file Device: fd01h/64769d Inode: 1013845 Links: 1 Access: (0660/-rw-rw----) Uid: ( 91/ tomcat) Gid: ( 91/ tomcat) Access: 2015-08-19 11:21:32.835211998 +0000 Modify: 2015-08-17 03:40:02.785809293 +0000 Change: 2015-08-17 03:40:02.785809293 +0000 Birth: -
xterrez
Ok, essayez d'ajouter le chemin absolu dans le fichier conf de tomcat et redémarrez le service. Réessayez ensuite les commandes stat pour voir les résultats.
VGe0rge

Réponses:

10

La réponse de Jamie est correcte: vous pouvez forcer rsyslog à enregistrer ce qui se passe avec tomcat. Cependant, cela ne répond pas pourquoi tomcat 7 sur rhel 7 ne se connecte pas à catalina.out. Ou si c'est le cas, pourquoi se connecte-t-il à la fois à catalina.out et à un catalina avec une date (si vous n'utilisez pas une installation RPM).

Premièrement, dans le passé vers 7.0.42, les scripts de Red Hat utilisaient catalina.out parce que leurs scripts imitaient le comportement de RHEL 6. Pour autant que je sache, ils utilisaient "forking" pour le service pour systemd. Lorsque la version 7.0.56 a été publiée, ils ont complètement changé cela en créant de nouveaux scripts et wrappers dans / usr / libexec / tomcat pour forcer tomcat à s'exécuter en simplemode au lieu de forked, permettant à systemd d'avoir le contrôle du PID stdoutet stderrd'aller au journal. Il y a toujours un catalina.$DATE.logfichier /var/log/tomcat, mais les informations sont plus limitées que d'habitude catalina.out.

Deuxièmement, regardons /etc/tomcat/logging.properties. Vous verrez qu'il trie les journaux d'une manière spécifique entre catalina, localhost, manager, host-manager. Vous remarquerez également qu'il prend également en charge la fonction rsyslog, et essentiellement comment il "le gère". Ce qu'il en est, c'est ConsoleHandlerdans ce fichier. La modification de ceux-ci modifierait le comportement des connexions /var/log/tomcat.

journalctl -u tomcatvous montrera tout ce que catalina.out est censé avoir. Pour autant que je sache, sans modifier les wrappers de Red Hat dans / usr / libexec / tomcat, il n'y a pas de moyen sûr de faire en sorte que tout aille juste à catalina.out. Si vous modifiez ces scripts et qu'une mise à jour sort, vos modifications seront écrasées.

Si vous voulez certainement catalina.out, allez avec l'exemple de configuration rsyslog de Jamie. Sachez simplement que cela remplira non seulement cela, mais le journal systemd aura également les mêmes informations.

Sokel
la source
Bonne réponse! Cela me fait penser à apporter des modifications incompatibles entre les versions de Tomcat ...: |
Rade_303
6

La création d'un nouveau fichier /etc/rsyslog.d/tomcat.confcontenant les deux lignes suivantes a fait l'affaire pour moi:

programname,contains,"server" /var/log/tomcat/catalina.out
programname,contains,"server" ~

Redémarrez ensuite votre démon rsyslog:

service rsyslog restart
Jamie De Palmenaer
la source
0

Il semble que la syntaxe rsyslog ait changé avec les versions plus récentes. En exécutant 8.24.0 sur RHEL 7.4, la syntaxe suivante le /etc/rsyslog.d/tomcat.conffait fonctionner pour moi:

if ($programname contains "server") then {
    action(type="omfile" file="/var/log/tomcat/catalina.out" flushOnTXEnd="off")
    stop
}

Ensuite, comme Jaimie le souligne, le redémarrage de rsyslog était nécessaire:

service rsyslog restart
Boyko
la source