web-dev-qa-db-ja.com

Tomcat 7がRHEL7のcatalina.outにログ出力を生成しない

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)
...
9
xterrez

ジェイミーの答えは正しいです。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とstdoutstderrを使用してジャーナルに移動します。 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ジャーナルも同じ情報を持つことを知っておいてください。

10
Sokel

新しいファイルを作成する/etc/rsyslog.d/Tomcat.conf次の2行を含めるとうまくいきました。

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

その後、rsyslogデーモンを再起動します。

service rsyslog restart
6

新しいバージョンで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
0
Boyko