Apache Tomcat 7.0がインストールされたRHEL7サーバーがあり、RHEL7.1への最近の更新後、$ {catalina.base} /logs/catalina.outへのすべてのロギングが停止されました。ただし、journalctl内のログを受信しています。
「journalctl -u Tomcat」と入力すると、ログが取得されます。 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)
...
ジェイミーの答えは正しいです。Tomcatで何が起こっているかをrsyslogに強制的に記録させることができます。しかし、それは答えませんwhy rhel 7上のTomcat 7は、catalina.outにログを記録しません。または、もしそうなら、なぜそれはcatalina.outとcatalinaの両方に日付を記録するのですか(RPMインストールを使用していない場合)。
まず、過去の7.0.42前後で、Red HatのスクリプトはRHEL 6の動作を模倣していたため、catalina.outを使用していました。私が知る限り、systemd
のサービスに「フォーク」を使用していました。 7.0.56がリリースされたとき、Tomcatをsimple
ではなくforked
モードで実行するように強制する新しいスクリプトとラッパーを/ usr/libexec/Tomcatに作成し、systemdがPIDとstdout
とstderr
を使用してジャーナルに移動します。 catalina.$DATE.log
には/var/log/Tomcat
ファイルがまだ残っていますが、情報は通常のcatalina.out
よりも制限されています。
次に、/ etc/Tomcat/logging.propertiesを見てみましょう。 catalina、localhost、manager、Host-managerの間で特定の方法でログを分類することがわかります。また、rsyslog機能もサポートされており、基本的にどのように「対処」されているかもわかります。それは、そのファイル内のConsoleHandler
です。これらを変更すると、/var/log/Tomcat
のログの動作が変更されます。
journalctl -u Tomcat
は、catalina.outが持っているはずのすべてを表示します。私が知る限り、/ usr/libexec/TomcatのRed Hatのラッパーを変更しない限り、すべてをcatalina.outだけに送信する確実な方法はありません。それらのスクリプトを変更して更新が出た場合、変更は上書きされます。
Catalina.outが確実に必要な場合は、Jamieのrsyslogサンプル構成を使用してください。それがそれを埋めるだけでなく、systemdジャーナルも同じ情報を持つことを知っておいてください。
新しいファイルを作成する/etc/rsyslog.d/Tomcat.conf
次の2行を含めるとうまくいきました。
programname,contains,"server" /var/log/Tomcat/catalina.out
programname,contains,"server" ~
その後、rsyslogデーモンを再起動します。
service rsyslog restart
新しいバージョンでrsyslog構文が変更されたようです。 RHEL 7.4で8.24.0を実行し、/etc/rsyslog.d/Tomcat.conf
うまく動作しました:
if ($programname contains "server") then {
action(type="omfile" file="/var/log/Tomcat/catalina.out" flushOnTXEnd="off")
stop
}
次に、Jaimieが指摘したように、rsyslogの再起動が必要であると指摘しました。
service rsyslog restart