Tomcat 7 non produce output di log su catalina.out su RHEL7


9

Ho un server RHEL7 con Apache Tomcat 7.0 installato e dopo un recente aggiornamento a RHEL7.1 tutta la registrazione su $ {catalina.base} /logs/catalina.out è stata interrotta. Tuttavia sto ricevendo i registri all'interno di journalctl.

Se digito journalctl -u tomcat ottengo la registrazione. C'è un modo per me di ottenere la registrazione anche su 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)
...

Hai verificato che la variabile "catalina.base" è impostata correttamente?
VGe0rge,

Sì, catalina.base è impostato correttamente. jinfo -sysprops 26435 | grep catalina.base catalina.base = /usr/share/tomcat
xterrez,

Potresti provare a vedere il file è stato aperto dal processo Tomcat. Prova astat /usr/share/tomcat/logs/catalina.out
VGe0rge,

No, quel processo tomcat non utilizza il file 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, prova ad aggiungere il percorso assoluto nel file conf tomcat e riavvia il servizio. Quindi riprovare i comandi stat per vedere i risultati.
VGe0rge,

Risposte:


10

La risposta di Jamie è corretta: puoi forzare rsyslog a registrare ciò che sta succedendo con Tomcat. Tuttavia, ciò non risponde al motivo per cui tomcat 7 su rhel 7 non accede a catalina.out. Oppure, in caso affermativo, perché accede a catalina.out e a catalina con una data (se non si utilizza un'installazione RPM).

Innanzitutto, in passato intorno alla 7.0.42, gli script di Red Hat utilizzavano catalina.out perché i loro script imitavano il comportamento di RHEL 6. Per quanto ne so, stavano usando "biforcazione" per il servizio systemd. Quando fu rilasciato 7.0.56, lo cambiarono completamente creando nuovi script e wrapper in / usr / libexec / tomcat per forzare l'esecuzione di tomcat in simplemodalità anziché forked, consentendo a systemd di avere il controllo del PID stdoute stderrdi andare al journal. C'è ancora un catalina.$DATE.logfile in /var/log/tomcat, ma le informazioni sono più limitate da quelle normali catalina.out.

In secondo luogo, diamo un'occhiata a /etc/tomcat/logging.properties. Vedrai che ordina i registri in un modo specifico tra catalina, localhost, manager, host-manager. Noterai anche che ha anche il supporto per la funzione rsyslog e fondamentalmente il modo in cui "si occupa" di esso. Ciò che si riduce è ConsoleHandlerin quel file. La modifica di questi cambierebbe il comportamento dei log in /var/log/tomcat.

journalctl -u tomcatti mostrerà tutto ciò che dovrebbe avere catalina.out. Per quanto ne so, senza modificare i wrapper di Red Hat in / usr / libexec / tomcat, non esiste un modo sicuro per fare in modo che tutto vada su catalina.out. Se si modificano tali script e viene visualizzato un aggiornamento, le modifiche verranno sovrascritte.

Se vuoi catalina.out di sicuro, vai con la configurazione di esempio rsyslog di Jamie. Sappi solo che non solo lo riempirà, ma anche il journal di systemd avrà le stesse informazioni.


Buona risposta! Mi viene da pensare di apportare modifiche incompatibili tra le versioni di Tomcat ...: |
Rade_303,

6

La creazione di un nuovo file /etc/rsyslog.d/tomcat.confcontenente le due righe successive mi ha aiutato:

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

Successivamente riavviare il demone rsyslog:

service rsyslog restart

0

Sembra che la sintassi di rsyslog sia cambiata con le versioni più recenti. Con 8.24.0 su RHEL 7.4, la sintassi seguente /etc/rsyslog.d/tomcat.confha funzionato per me:

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

Quindi, come sottolinea Jaimie, era necessario riavviare rsyslog:

service rsyslog restart
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.