Tomcat 7 erzeugt keine Protokollausgabe an Catalina.out auf RHEL7

9

Ich habe einen RHEL7-Server mit Apache Tomcat 7.0 installiert und nach einem kürzlich durchgeführten Update auf RHEL7.1 wurde die gesamte Protokollierung in $ {catalogina.base} /logs/catalina.out gestoppt. Ich erhalte jedoch die Protokolle in journalctl.

Wenn ich journalctl -u tomcat eingebe, erhalte ich die Protokollierung. Gibt es eine Möglichkeit für mich, die Protokollierung auch an Catalina.out zu senden?

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
quelle
Haben Sie überprüft, ob die Variable "catalogina.base" richtig eingestellt ist?
VGe0rge
Ja, die Catalina.Base ist richtig eingestellt. jinfo -sysprops 26435 | grep catalina.base catalina.base = /usr/share/tomcat
Xterrez
Sie könnten versuchen zu sehen, ob die Datei überhaupt vom Tomcat-Prozess geöffnet wird. Versuchen Siestat /usr/share/tomcat/logs/catalina.out
VGe0rge
Nein, dieser Tomcat-Prozess verwendet nicht die Datei catalogina.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, versuchen Sie, den absoluten Pfad in die Tomcat Conf-Datei einzufügen und starten Sie den Dienst neu. Wiederholen Sie dann die stat-Befehle, um die Ergebnisse anzuzeigen.
VGe0rge

Antworten:

10

Jamies Antwort ist richtig, dass Sie rsyslog zwingen können, zu protokollieren, was mit Tomcat los ist. Dies beantwortet jedoch nicht, warum sich Tomcat 7 auf Rhel 7 nicht bei Catalina.out anmeldet. Oder wenn ja, warum protokolliert es sowohl bei Catalina.out als auch bei einer Catalina mit einem Datum (wenn Sie keine RPM-Installation verwenden).

Erstens verwendeten die Skripte von Red Hat in der Vergangenheit um 7.0.42 Catalina.out, weil ihre Skripte das Verhalten von RHEL 6 nachahmten. Soweit mir bekannt ist, verwendeten sie "Forking" für den Dienst für systemd. Wenn 7.0.56 veröffentlicht wurde, änderten sie das vollständig durch neue Skripte und Wrapper macht in / usr / libexec / tomcat zu Kraft tomcat in läuft simpleModus statt forked, systemd die Steuerung des PID zu haben und stdoutund stderrdas Journal zu gehen. Es ist noch eine catalina.$DATE.logDatei vorhanden /var/log/tomcat, aber die Informationen sind von einer normalen Datei eingeschränkter catalina.out.

Zweitens schauen wir uns /etc/tomcat/logging.properties an. Sie werden sehen, dass die Protokolle auf eine bestimmte Weise zwischen Catalina, Localhost, Manager und Host-Manager sortiert werden. Sie werden auch feststellen, dass es auch Unterstützung für rsyslog-Funktionen bietet und im Grunde genommen, wie es damit "umgeht". Worauf es ankommt, ist das ConsoleHandlerin dieser Datei. Wenn Sie diese ändern, ändert sich das Verhalten der Anmeldungen /var/log/tomcat.

journalctl -u tomcatzeigt Ihnen alles, was Catalina.out haben soll. Soweit mir bekannt ist, gibt es ohne Änderung der Red Hat-Wrapper in / usr / libexec / tomcat keinen sicheren Weg, um alles nur auf Catalina.out zu übertragen. Wenn Sie diese Skripte ändern und ein Update veröffentlicht wird, werden Ihre Änderungen überschrieben.

Wenn Sie Catalina.out sicher wollen, gehen Sie mit Jamies rsyslog-Beispielkonfiguration. Wissen Sie nur, dass es nicht nur das ausfüllt, sondern das systemd-Journal auch die gleichen Informationen enthält.

Sokel
quelle
Gute Antwort! Ich habe darüber nachgedacht, inkompatible Änderungen zwischen Tomcat-Versionen vorzunehmen ...: |
Rade_303
6

Das Erstellen einer neuen Datei /etc/rsyslog.d/tomcat.confmit den nächsten beiden Zeilen hat mir geholfen:

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

Starten Sie anschließend Ihren rsyslog-Daemon neu:

service rsyslog restart
Jamie De Palmenaer
quelle
0

Es scheint, dass sich die rsyslog-Syntax mit den neueren Versionen geändert hat. Mit 8.24.0 unter RHEL 7.4 funktioniert die folgende Syntax /etc/rsyslog.d/tomcat.conffür mich:

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

Dann, wie Jaimie betont, war ein Neustart von rsyslog erforderlich:

service rsyslog restart
Boyko
quelle