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


9

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

変数「catalina.base」が正しく設定されていることを確認しましたか?
VGe0rge 2015

はい、catalina.baseは正しく設定されています。 jinfo -sysprops 26435 | grep catalina.base catalina.base = /usr/share/tomcat
xterrez

tomcatプロセスによってファイルが開かれていることを確認することができます。試してみるstat /usr/share/tomcat/logs/catalina.out
VGe0rge

いいえ、そのtomcatプロセスは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 2015

OK、tomcat confファイルに絶対パスを追加して、サービスを再起動してみてください。次に、statコマンドを再試行して結果を確認します。
VGe0rge 2015

回答:


10

Jamieの答えは正しいです。tomcatで何が起こっているかをrsyslogに強制的に記録させることができます。ただし、rhel 7のtomcat 7がcatalina.outにログを記録しないのはなぜですか。または、もしそうなら、なぜそれはcatalina.outと日付でcatalinaの両方にログを記録するのですか(RPMインストールを使用していない場合)。

まず、過去の7.0.42前後で、Red HatのスクリプトはRHEL 6の動作を模倣していたため、catalina.outを使用していましたsystemd。7.0.56がリリースされたとき、彼らは完全に実行するために力をTomcatには/ usr / libexecに/ tomcatの中に新しいスクリプトやラッパーを作ることによってこれを変更simpleモードの代わりforkedに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 tomcatcatalina.outが持っているはずのものがすべて表示されます。私が知る限り、/ usr / libexec / tomcatのRed Hatのラッパーを変更しない限り、すべてをcatalina.outだけに送信する確実な方法はありません。これらのスクリプトを変更して更新が出た場合、変更は上書きされます。

catalina.outが確実に必要な場合は、Jamieのrsyslogサンプル構成を使用してください。それはそれを埋めるだけでなく、systemdジャーナルも同じ情報を持つことを知っておいてください。


いい答えです!Tomcatのリリース間で互換性のない変更を加えることを考えています...:|
Rade_303 2017年

6

/etc/rsyslog.d/tomcat.conf次の2行を含む新しいファイルを作成すると、私にとってはうまくいきました。

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

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

service rsyslog restart

0

新しいバージョンで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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.