2011-10-12 41 views
16

Có cách nào để đăng nhập tất cả đầu ra stdout vào tệp catalina.log trong Tomcat không? (ví dụ: mọi thứ được in thành System.out.println())Làm thế nào để đăng nhập đầu ra stdout trong Tomcat?

Cửa sổ bảng điều khiển mở ra khi bạn chạy TOMCAT/bin/startup.bat hiển thị đầu ra từ chế độ xuất chuẩn nhưng không được lưu vào TOMCAT/logs/catalina.<date>.log.

Vấn đề cụ thể của tôi là tôi có một trình điều khiển ứng dụng được xác định trong log4j để xuất ra bàn điều khiển. Các thông điệp tường trình này xuất hiện chính xác trong cửa sổ giao diện điều khiển Tomcat, nhưng chúng không được ghi vào catalina.log. Tôi đang chạy Tomcat 5.5 trên Windows. Cảm ơn.

EDIT:

Đây là tập tin log4j.properties tôi. Nó được đặt tại TOMCAT/webapps/app/WEB-INF/classes/log4j.properties:

log4j.rootCategory=DEBUG, console 
log4j.appender.console=org.apache.log4j.ConsoleAppender 
log4j.appender.console.layout=org.apache.log4j.PatternLayout 
log4j.appender.console.layout.ConversionPattern=[%d{ABSOLUTE} %-5p %c{1}]: %m%n 
+0

Có tomcat đăng nhập để catalina.log, khi bạn bắt đầu nó như là một dịch vụ cửa sổ thay vì sử dụng khởi động dơi? – Gandalf

+0

@Gandalf Tôi không biết. Tôi không muốn chạy nó như một dịch vụ. – Michael

+0

Nơi nào bạn có log4j được cấu hình với giao diện điều khiển appender? Mỗi ứng dụng web hoặc trên chính tomcat? – Gandalf

Trả lời

1

Bạn đã kiểm tra xem tệp log4j.properties có thể được tìm thấy từ ứng dụng của bạn không? Có lẽ bạn có thể kiểm tra, bằng cách thiết lập một đường dẫn tập tin mã hóa cứng như

-Dlog4j.configuration = file: /// C: \ Dev \ log4j.properties

Nếu các bản ghi được viết sau khi các thay đổi, đường dẫn relativ đến tệp log4j là sai.

+0

Nó nằm trong thư mục gốc của đường dẫn lớp của tôi. Vì vậy, nó nằm tại: 'TOMCAT/webapps/app/WEB-INF/lớp học/log4j.properties'. – Michael

0

Nếu tôi nhìn vào cấu hình logging mặc định của tomcat 5,5 trong logging.properties:

org.apache.catalina.core.ContainerBase.[Catalina].[localhost].level = INFO 
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].handlers = 2localhost.org.apache.juli.FileHandler 

Đó vẻ với tôi như thể stdout của các ứng dụng web có thể đăng nhập vào các tập tin duy nhất cho mức INFO trở lên, regading rằng http://tomcat.apache.org/tomcat-5.5-doc/logging.html nói rằng trong tomcat JULI logger logger cấu hình không sử dụng xử lý của cha mẹ khi họ được giao xử lý riêng của họ. Ngoài ra, tệp phải có tiền tố localhost và không phải là catalina. Nhưng sau đó tôi không hiểu làm thế nào đầu ra đến cửa sổ đầu ra của bạn:/

+0

Cảm ơn. Tôi đã thử thay đổi tất cả các cấp từ "INFO" thành "DEBUG", nhưng không có đầu ra stdout nào xuất hiện trong bất kỳ tệp nhật ký nào (catalina, localhost, manager hoặc host-manager). Tôi sẽ phải đọc liên kết đó chi tiết hơn. – Michael

10

Tôi đã xem qua các câu hỏi tương tự trước đây và chưa tìm cách thực hiện việc này bằng cách đăng nhập System.out trong Windows unless you are running Tomcat as a Windows service. Điều này dường như làm việc theo mặc định trong Unix từ startup.sh điểm để catalina.sh mà các bản ghi stdout vào file catalina.out như dưới đây

org.apache.catalina.startup.Bootstrap "[email protected]" start >> "$CATALINA_BASE"/logs/catalina.out 2>&1 & 

Trong log4j, ConsoleAppender tự nó không thêm vào sau một tập tin, chỉ để System.out

Tuy nhiên , Tôi đã sửa đổi các thuộc tính log4j của bạn để thêm một FileAppender và cấu hình này hoạt động, nhưng tất nhiên điều này đăng nhập vào một tệp nhật ký riêng biệt.

cấu hình mới

# Set root logger level to DEBUG. 
log4j.rootLogger=DEBUG, console, myFile 

log4j.appender.console=org.apache.log4j.ConsoleAppender 
log4j.appender.console.layout=org.apache.log4j.PatternLayout 
log4j.appender.console.layout.ConversionPattern=[%d{ABSOLUTE} %-5p %c{1}]: %m%n 




# myFile writes to file 
log4j.appender.myFile=org.apache.log4j.RollingFileAppender 
log4j.appender.myFile.File=logs/tomcatlog4j.log 
log4j.appender.myFile.MaxFileSize=100KB 
log4j.appender.myFile.layout=org.apache.log4j.PatternLayout 
log4j.appender.myFile.layout.ConversionPattern==[%d{ABSOLUTE} %-5p %c{1}]: %m%n 

Output

= [15: 24: 03.819 INFO A1]: Trong my.jsp = [15: 24: 03.975 INFO A1]: Out of tôi .jsp = [15: 24: 04,880 THÔNG TIN A1]: Trong my.jsp = [15: 24: 04,880 THÔNG TIN A1]: Trong số của tôi.jsp

cũng thấy

How to log exceptions from a specific package deployed in tomcat

log select events into a separate file

https://serverfault.com/questions/201178/tomcat-5-5-how-to-redirect-the-logging-output-to-one-file-per-web-application

+0

Vì vậy, bạn đang nói trên Linux, một ConsoleAppender sẽ viết thư cho catalina.out, nhưng trên Windows nó không trừ khi Tomcat được chạy như một dịch vụ? – Michael

+0

@Michael: Tôi có thể xác nhận ConsoleAppender ** không ** ghi vào 'catalina.out' trên Linux. Tôi đã thử nghiệm điều này. – JoseK

+0

Ok, cảm ơn, tôi chỉ muốn chắc chắn rằng tôi hiểu những gì bạn nói. Vì vậy, có vẻ như câu trả lời cho câu hỏi của tôi là, "Không, ConsoleAppender sẽ chỉ viết thư cho catalina.log trên Windows nếu Tomcat được chạy dưới dạng dịch vụ" – Michael

Các vấn đề liên quan