2008-12-21 19 views
6

Tôi đang cố gắng tìm ra một cách rõ ràng để ngăn chặn các trường hợp ngoại lệ chưa thực hiện xảy ra trong đơn đăng ký của tôi.Làm cách nào tôi có thể chặn các trường hợp ngoại lệ chưa được thực hiện trên Tomcat?

Tôi có cấu hình log4j để ghi nhật ký luồng ứng dụng thông thường và các ngoại lệ bị bắt, do đó sẽ được xử lý. Ngay bây giờ, tôi có một lớp học có tất cả các thông báo lỗi và thêm chúng vào hàng đợi để được gửi qua email theo lô. Lý tưởng nhất, tôi hy vọng rằng có một cách tôi có thể đi về việc ngăn chặn các trường hợp ngoại lệ chưa được bắt, để tôi có thể chuyển chúng vào cùng một hàng đợi email, nhưng nếu điều này là không khả thi, tôi chắc chắn mở để gợi ý.

Tôi quen thuộc với LogInterceptors trên JBoss, nhưng dự án này đang sử dụng Tomcat. Có cách nào mà tôi có thể đi về việc này không? Có một LogInterceptor equivelant cho Tomcat? Tôi có nên thử chuyển hướng đăng nhập Tomcat tới một appender tùy chỉnh không? (Nếu có - bất kỳ gợi ý nào về điều đó?) Một số ý tưởng khác?

Tôi nhận thấy rằng điều này là một vấn đề được giải quyết ngay bây giờ, vì vậy tôi hy vọng sẽ khai thác một số trí tuệ tập thể. Cảm ơn, tất cả mọi người, trước.

Trả lời

5

Theo thông số J2EE 1.4, ngoại lệ chưa được khai báo trong một servlet có thể được chuyển tiếp đến một trang lỗi như được định nghĩa trong bộ mô tả triển khai. Khi điều này xảy ra, việc triển khai trang sẽ nhận được các đối tượng yêu cầu và phản hồi ban đầu, với việc bổ sung thuộc tính yêu cầu có tên là javax.servlet.error.exception có chứa đối tượng ngoại lệ.

Điều đó nói rằng, tôi chưa thực sự làm điều này với Tomcat và hầu hết các ứng dụng web mà tôi đã làm việc để chuyển tiếp tới trang lỗi chung ở cấp độ máy chủ web.

Chỉnh sửa: chỉ cần thử nó ra trên máy chủ địa phương của tôi, sau khi thêm dòng sau vào web.xml của tôi, và nó hoạt động như quảng cáo:

<error-page> 
    <exception-type>java.lang.Exception</exception-type> 
    <location>/dumpRequest.jsp</location> 
</error-page> 
1

Nó không phải Tomcat cụ thể, nhưng bạn có thể set uncaught exception handlers on a per-thread basis.

Tùy thuộc vào thiết lập ứng dụng của bạn, bạn có thể đặt cài đặt này ở đầu phương thức xử lý yêu cầu. Bạn có thể phải làm điều đó mọi lúc, vì bạn có thể nhận được một chủ đề theo yêu cầu.

Một nơi tốt để đặt nó sẽ ở trong một số loại bộ điều khiển phía trước.

+0

Tôi đoán điều này sẽ không hoạt động như tomcat sẽ bắt tất cả ngoại lệ ngay cả khi ứng dụng của bạn không. Nếu nó không đề trong threadpool của nó sẽ tiếp tục chết trên các lỗi webapp. –

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