Tomcat 7 tidak menghasilkan output log ke catalina.out di RHEL7

9

Saya memiliki server RHEL7 dengan Apache Tomcat 7.0 diinstal dan setelah pembaruan baru-baru ini ke RHEL7.1 semua penebangan ke $ {catalina.base} /logs/catalina.out dihentikan. Namun saya menerima log di dalam journalctl.

Jika saya mengetik jurnalctl -u tomcat saya mendapatkan logging. Apakah ada cara bagi saya untuk mendapatkan logging juga untuk 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)
...
xterrez
sumber
Sudahkah Anda memverifikasi bahwa variabel "catalina.base" disetel dengan benar?
VGe0rge
Ya catalina.base diatur dengan benar. jinfo -sysprops 26435 | grep catalina.base catalina.base = /usr/share/tomcat
xterrez
Anda bisa mencoba melihat file dibuka sama sekali oleh proses tomcat. Cobalah untukstat /usr/share/tomcat/logs/catalina.out
VGe0rge
Tidak, proses kucing jantan itu tidak menggunakan 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, coba tambahkan path absolut dalam file tomcat conf dan restart layanan. Kemudian coba lagi perintah stat untuk melihat hasilnya.
VGe0rge

Jawaban:

10

Jawaban Jamie benar bahwa Anda dapat memaksa rsyslog untuk mencatat apa yang terjadi dengan kucing jantan. Namun, itu tidak menjawab mengapa tomcat 7 pada rhel 7 tidak masuk ke catalina.out. Atau jika ya, mengapa log masuk ke catalina.out dan catalina dengan tanggal (jika Anda tidak menggunakan instalasi RPM).

Pertama, di masa lalu sekitar 7.0.42, skrip Red Hat menggunakan catalina.out karena skrip mereka meniru perilaku RHEL 6. Sejauh yang saya ketahui, mereka menggunakan "forking" untuk layanan tersebut systemd. Ketika 7.0.56 dirilis, mereka mengubah sepenuhnya dengan membuat skrip dan pembungkus baru di / usr / libexec / tomcat untuk memaksa tomcat untuk berjalan dalam simplemode alih-alih forked, memungkinkan systemd untuk memiliki kontrol PID dan stdoutdan stderruntuk pergi ke jurnal. Masih ada catalina.$DATE.logfile di dalam /var/log/tomcat, tetapi informasinya lebih terbatas dari biasanya catalina.out.

Kedua, mari kita lihat /etc/tomcat/logging.properties. Anda akan melihatnya memilah log dengan cara tertentu antara catalina, localhost, manajer, host-manager. Anda juga akan melihat bahwa ia memiliki dukungan fasilitas rsyslog juga, dan pada dasarnya bagaimana "berurusan" dengannya. Apa yang terjadi adalah ConsoleHandlerdalam file itu. Mengubah itu akan mengubah perilaku log /var/log/tomcat.

journalctl -u tomcatakan menunjukkan semua yang catalina.out seharusnya miliki. Sejauh yang saya ketahui, tanpa memodifikasi pembungkus Red Hat di / usr / libexec / tomcat, tidak ada cara yang pasti untuk membuat semuanya berjalan hanya dengan catalina.out. Jika Anda memang memodifikasi skrip tersebut dan pembaruan keluar, perubahan Anda akan ditimpa.

Jika Anda ingin catalina.out pasti, pergi dengan konfigurasi contoh rsyslog Jamie. Ketahuilah bahwa itu tidak hanya akan mengisi itu, tetapi jurnal systemd juga akan memiliki informasi yang sama.

Sokel
sumber
Jawaban yang bagus! Ini membuat saya berpikir untuk membuat perubahan yang tidak kompatibel antara rilis Tomcat ...: |
Rade_303
6

Membuat file baru yang /etc/rsyslog.d/tomcat.confberisi dua baris berikutnya membantu saya:

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

Setelah itu restart daemon rsyslog Anda:

service rsyslog restart
Jamie De Palmenaer
sumber
0

Tampaknya sintaksis rsyslog berubah dengan versi yang lebih baru. Menjalankan 8.24.0 di RHEL 7.4, sintaks berikut ini /etc/rsyslog.d/tomcat.confmembuatnya berfungsi untuk saya:

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

Kemudian, ketika Jaimie menunjukkan restart rsyslog diperlukan:

service rsyslog restart
Boyko
sumber