Tomcat 7 không tạo đầu ra log cho catalina.out trên RHEL7


9

Tôi đã cài đặt máy chủ RHEL7 với Apache Tomcat 7.0 và sau khi cập nhật gần đây lên RHEL7.1, tất cả việc đăng nhập vào $ {catalina.base} /logs/catalina.out đã bị dừng. Tuy nhiên tôi đang nhận được các bản ghi trong tạp chí.

Nếu tôi gõ tạp chí tomct -u tomcat, tôi sẽ đăng nhập. Có cách nào để tôi đăng nhập vào catalina.out không?

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

Bạn đã xác minh rằng biến "catalina.base" được đặt chính xác chưa?
VGe0rge

Có catalina.base được đặt chính xác. jinfo -sysprops 26435 | grep catalina.base catalina.base = /usr/share/tomcat
xterrez

Bạn có thể thử xem tập tin được mở bằng quy trình tomcat. Hãy thửstat /usr/share/tomcat/logs/catalina.out
VGe0rge

Không, quá trình tomcat đó không sử dụng tệp 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, hãy thử thêm đường dẫn tuyệt đối trong tệp conf tomcat và khởi động lại dịch vụ. Sau đó thử lại các lệnh stat để xem kết quả.
VGe0rge

Câu trả lời:


10

Câu trả lời của Jamie là chính xác rằng bạn có thể buộc rsyslog ghi nhật ký những gì đang xảy ra với tomcat. Tuy nhiên, điều đó không trả lời tại sao tomcat 7 trên rrc 7 không đăng nhập vào catalina.out. Hoặc nếu có, tại sao nó lại đăng nhập vào cả catalina.out và catalina có ngày (nếu bạn không sử dụng cài đặt RPM).

Đầu tiên, trong quá khứ khoảng 7.0.42, các tập lệnh của Red Hat đã sử dụng catalina.out vì các tập lệnh của họ bắt chước hành vi của RHEL 6. Theo như tôi biết, họ đã sử dụng "forking" cho dịch vụ này systemd. Khi 7.0.56 được phát hành, họ đã thay đổi mà hoàn toàn bằng cách làm cho các kịch bản mới và giấy gói trong / usr / libexec / tomcat để lực lượng tomcat để chạy trong simplechế độ thay vì forked, cho phép systemd có quyền kiểm soát của PID và stdoutstderrđi đến tạp chí. Vẫn còn một catalina.$DATE.logtập tin /var/log/tomcat, nhưng thông tin hạn chế hơn bình thường catalina.out.

Thứ hai, hãy xem /etc/tomcat/logging.properies. Bạn sẽ thấy nó sắp xếp các bản ghi theo một cách cụ thể giữa catalina, localhost, người quản lý, người quản lý máy chủ. Bạn cũng sẽ nhận thấy rằng nó cũng có hỗ trợ cơ sở rsyslog, và về cơ bản cách nó "đối phó" với nó. Những gì nó đi xuống là ConsoleHandlertrong tập tin đó. Thay đổi chúng sẽ thay đổi hành vi của các bản ghi trong /var/log/tomcat.

journalctl -u tomcatsẽ cho bạn thấy mọi thứ mà catalina.out cần phải có. Theo như tôi biết, mà không sửa đổi các trình bao bọc của Red Hat trong / usr / libexec / tomcat, không có cách nào chắc chắn để biến mọi thứ thành chỉ catalina.out. Nếu bạn sửa đổi các tập lệnh đó và một bản cập nhật xuất hiện, các thay đổi của bạn sẽ bị ghi đè.

Nếu bạn muốn catalina.out chắc chắn, hãy đi với cấu hình ví dụ rsyslog của Jamie. Chỉ cần biết rằng nó sẽ không chỉ điền vào đó, mà tạp chí systemd cũng sẽ có thông tin tương tự.


Câu trả lời tốt! Nó khiến tôi suy nghĩ về việc thực hiện các thay đổi không tương thích giữa các bản phát hành Tomcat ...: |
Rade_303

6

Tạo một tệp mới /etc/rsyslog.d/tomcat.confchứa hai dòng tiếp theo đã giúp tôi:

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

Sau đó khởi động lại daemon rsyslog của bạn:

service rsyslog restart

0

Có vẻ như cú pháp rsyslog đã thay đổi với các phiên bản mới hơn. Chạy 8.24.0 trên RHEL 7.4, cú pháp sau đây /etc/rsyslog.d/tomcat.confgiúp nó hoạt động với tôi:

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

Sau đó, khi Jaimie chỉ ra việc khởi động lại rsyslog là cần thiết:

service rsyslog restart
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.