2010-05-30 41 views
5

Tôi đã viết một lớp java, nếu một phương thức ném một ngoại lệ, một email sẽ được gửi, qua thư java, với báo cáo cho quản trị viên.Gửi email khi ngoại lệ bị ném

Nó hoạt động - câu hỏi của tôi là w.r.t sang trọng - để bắt ngoại lệ được ném bởi phương thức chính, phương thức sendEmail() nằm trong khối catch của phương thức chính. Phương thức sendEmail() có khối try-catch riêng.

Có hiệu lực - có vẻ như dưới đây - có cách viết hay hơn không?

try { 
    foo; 
} 
catch { 
    try{ 
    sendEmail(); 
    } 
    catch { 
    log(e.message); 
    } 
} 

Trả lời

3

Java có thể có các khối try/catch lồng nhau.

Nếu bạn muốn, bạn có thể di chuyển khối try/catch sendmail sang phương thức khác. Khi các khối try/catch phức tạp hơn, nó sẽ làm cho mã dễ hiểu hơn.

19

Nếu bạn muốn một thứ gì đó "thanh lịch hơn", một gợi ý đơn giản là để phương thức trợ giúp sendEmail của bạn bắt và ghi lại các ngoại lệ email. (Tôi không tưởng tượng bạn muốn ngoại lệ đối với tuyên truyền ... hoặc làm một số phục hồi khác ...)


Tuy nhiên, có một cái gì đó quan trọng hơn để nói. Những gì bạn đang triển khai ở đây là cách tiếp cận sai sai để báo cáo lỗi.

  • Nếu có điều gì xấu xảy ra với ứng dụng của bạn có một cơ hội mà bạn sẽ SPAM người quản trị với nhiều email báo cáo cùng một vấn đề trên, và kết thúc, và hơn ...

  • Bằng cách gửi email từ sâu bên trong mã của bạn, bạn đang gây khó khăn cho quản trị viên để tích hợp báo cáo lỗi của ứng dụng của bạn.

Cách tiếp cận tốt hơn là báo cáo sự cố thông qua khung ghi nhật ký Java như Log4J. Nếu quản trị viên muốn anh/cô ấy có thể cấu hình một số loại hệ thống giám sát như LogWatch, Nagios, v.v ... Như vậy hệ thống giám sát sẽ phát hiện và phân loại lỗi, dị thường, vv (như lỗi ứng dụng của bạn) trong các luồng logger khác nhau, -dup chúng và nếu quản trị viên định cấu hình nó gửi thông báo qua email, máy nhắn tin hoặc bất kỳ thứ gì.

+1

+1 "Ghi nhật ký + hành động ngoại tuyến" thực sự tốt hơn – JoseK

+1

+1, luôn tách mã ứng dụng khỏi theo dõi hoạt động trang web (liên hệ với quản trị viên, v.v.) –

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