2011-08-05 19 views
9

Tôi đang tìm cách nâng cấp phiên bản tomcat của chúng tôi từ 5.5.27 lên 6.0.32 và có một số vấn đề với việc ghi nhật ký từ các thẻ trong thư mục shared/lib (Tôi đã tạo lại thư mục này trong tomcat 6).Lấy lọ trong tomcat/shared/lib để đăng nhập bằng cách sử dụng cấu hình của webapp gọi cho chúng

Chúng tôi có một tệp jar mà chúng tôi tạo ra như là một phần của quá trình xây dựng của chúng tôi với một số mã phổ biến trong đó và dưới tomcat 5 này đã được chia sẻ/lib. Khi chúng tôi viết các câu lệnh đăng nhập từ mã trong tệp jar này, chúng được ghi vào tệp nhật ký của ứng dụng web đang gọi bình tại thời điểm đó. Mỗi ứng dụng web của chúng tôi có log4j.properites và log4j.jar trong thư mục WEB-INF/lib của nó và cũng có một log4j.jar trong shared/lib, nhưng không phải log4j/properties.

Chúng tôi đang sử dụng log4j và được tham chiếu đến các bản ghi như sau:

import org.apache.commons.logging.Log; 
import org.apache.commons.logging.LogFactory;  
public class MyClass { 
    private final static Log CLASS_LOG = LogFactory.getLog(MyClass.class); 
} 

Nhưng khi tôi di chuyển cấu hình chính xác cùng một lọ, webapps, log4.properties và log4j.jars của chúng tôi vào tomcat 6, đăng nhập khai báo từ bình thường của chúng tôi chỉ cần đi đến catalina.log.

Tôi đã thực hiện một số lượng công bằng đọc (bao gồm http://www.mulesoft.com/tomcat-classpath và trình nạp lớp và ghi tài liệu trên trang web tomcat) và chủ yếu là tôi không thể tìm ra cách hoạt động theo cách trong tomcat 5! (Tôi đã không thiết lập nó, nó là một cái gì đó tôi đã thừa hưởng rằng cho đến bây giờ đã 'chỉ làm việc').

Có ai có bất kỳ trải nghiệm tương tự nào về việc cố gắng nhận nhật ký từ lib được chia sẻ vào tệp nhật ký webapp không? Tôi đang nghĩ rằng việc đặt jar được chia sẻ trong mỗi thư mục WEB-INF/lib của webapp sẽ sắp xếp điều này nhưng sau đó tôi sẽ kết thúc với nhiều bản sao của cùng một thứ.

+2

Đóng gói các lọ được chia sẻ với các ứng dụng web riêng lẻ - tiết kiệm một vài megabyte RAM chỉ là không đáng để các cơn đau đầu tải lớp. Thêm vào đó, rất có khả năng sớm hay muộn các ứng dụng của bạn sẽ yêu cầu các phiên bản khác nhau của các phụ thuộc. – Dmitri

+0

@Dmitri +1 vì tôi coi đó là giải pháp, nhưng tôi không thấy lý do tại sao nó chỉ là nhận xét và không được cung cấp làm câu trả lời. – Gressie

Trả lời

2

Kiểm tra tomcat/conf/catalina.properties trong tomcat6/7. Họ không dùng nữa đường dẫn được chia sẻ và máy chủ, chỉ đường dẫn chung được định cấu hình rõ ràng (ví dụ: tomcat6/lib là phổ biến). Bạn có thể bật lại chia sẻ và phỏng đoán của tôi là bạn sẽ có được trải nghiệm tương tự như tomcat 5.x.

Tuy nhiên, bạn nói rằng bạn đang đặt logging.properties trong WEB-INF/lib Tôi không nghĩ rằng đó là đúng, vì đó chỉ nên chứa các tệp jar. Bạn cũng nên đi vào WEB-INF/classes/

Ngoài ra, tại thời điểm này, hãy ngừng sử dụng tính năng ghi nhật ký. Thay vào đó Code thành slf4j, vì nó có ít vấn đề tomcat hơn. Ngoài ra nếu bạn sử dụng logback thay vì log4j, nó tránh thậm chí phải sử dụng bộ điều hợp (ví dụ: các cuộc gọi slf4j của bạn thực sự là các cuộc gọi logback trực tiếp). Sử dụng tệp cấu hình khác (nhưng có các trình chuyển đổi log4j.property trực tuyến).

0

Tôi không biết chính xác cách trình nạp lớp của tomcat được định cấu hình như thế nào. Với máy chủ ứng dụng websphere của chúng tôi, chúng tôi đã có cùng một vấn đề và phải cấu hình lại trình nạp lớp để tải "cuối cùng của cha mẹ".

Điều này có nghĩa là tìm kiếm tệp cấu hình và libs đầu tiên trong thư mục ứng dụng và chỉ sau khi anh không tìm thấy tài nguyên được yêu cầu mà anh tải cấu hình của máy chủ web.

Có thể thats case và tomcat 5.x đã được định cấu hình theo cách đó.

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