2015-12-23 14 views
5

Có cách nào để nhận thông báo về mọi ngoại lệ được ném trong thời gian chạy (được xử lý và không được xử lý) không?Nhận thông báo về mọi ngoại lệ được ném (thậm chí là xử lý)

Điều tôi muốn là một cơ chế ghi nhật ký ghi lại mọi ngoại lệ xuất hiện trong khi chương trình của tôi đang chạy. Tôi không muốn xử lý các ngoại lệ với trình ghi nhật ký này, tôi chỉ muốn có thể ghi lại sự kiện của một ngoại lệ bị ném.
Cái này là tôi muốn bao gồm tất cả các trường hợp ngoại lệ hệ thống cũng như do đó nó không thể gọi một hàm bất cứ khi nào tôi ném một ngoại lệ mới ...

Tôi đã đọc một cái gì đó về ExceptionListener nhưng họ dường như được dành cho một công việc khác.

Có ai có ý tưởng về điều này có thể thực hiện được không?

+0

Câu trả lời này có thể làm những gì bạn muốn: http://stackoverflow.com/a/20284294/611819 – dnault

+0

có vẻ đầy hứa hẹn ... nhưng điều này sẽ chỉ cho phép tôi nhận các ngoại lệ được xử lý trong khối try/catch .. – Raven

+0

Tại sao bạn muốn làm điều này? Nếu một ngoại lệ xảy ra và được xử lý như là một phần của quá trình xử lý thông thường, tại sao mọi người nên quan tâm. Nếu bạn có một số mã bắt tất cả ngoại lệ và ném chúng đi ... Bạn nên sửa mã đó để hoạt động tốt hơn. – Raedwald

Trả lời

2

Trường hợp ngoại lệ thường được ghi lại khi bị bắt (thay vì bị ném), do đó hậu quả của chúng cũng có thể được ghi lại. Đó là, một số trường hợp ngoại lệ không có hậu quả, do đó đảm bảo không có điều tra, trong khi các trường hợp ngoại lệ khác là cực kỳ quan trọng, và phải được điều tra bất cứ khi nào chúng xảy ra. Do đó, một tệp nhật ký tốt nên truyền đạt không chỉ là một ngoại lệ đã xảy ra, mà còn là tác động (doanh nghiệp) của ngoại lệ đó, chỉ được biết sau khi ngoại lệ bị bắt. Điều này yêu cầu các ngoại lệ được ghi lại khi chúng được xử lý.

Do đó, không có Java API để chặn tất cả các ngoại lệ được chương trình đang chạy ném ra.

Tuy nhiên, đôi khi, đôi khi có thể giúp xem xét tất cả ngoại lệ được ném. Bạn có thể làm như vậy bằng cách đính kèm trình gỡ rối vào JVM và đặt "điểm ngắt ngoại lệ" cho tất cả các lớp con của java.lang.Throwable. Ngoài ra, bạn có thể viết một máy đánh chặn để ghi lại tất cả các ngoại lệ vượt qua một số ranh giới API (bất kỳ thùng chứa phụ thuộc hợp lý nào có thể giúp với điều đó). Hoặc bạn có thể sử dụng Instrumentation API để thêm ghi nhật ký vào các lớp khi chúng được tải.

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