2013-02-22 34 views
7

Các mã lỗi unhandled trong aspx.cs sẽ bị xử lý bởi Application_Error trong global.asax.
Tôi đã viết một số mã trong trình xử lý Application_Error để đăng nhập các lỗi không được xử lý xảy ra trong aspx.cs
Nhưng nếu mã của bản thân nhật ký cũng không thành công và tạo ra một ngoại lệ (có thể do sự cố về I/O hoặc tệp hệ thống)
Tôi có nên ném ngoại lệ như vậy không?
Nếu tôi loại bỏ, sự kiện nào sẽ nhận được ngoại lệ như vậy?
Hoặc nó không có sự khác biệt nếu tôi viết cú pháp "ném" hay không?
Các mẫu mã như sau
Tôi có nên ném ra một ngoại lệ xảy ra trong trình xử lý Application_Error trong Global.asax không?

protected void Application_Error(object sender, EventArgs e) 
{ 
    try 
    { 
     // my codes to log exception to Database System here.... 
    } 
    catch(Exception) 
    { 
     throw; //Should I write "throw" syntax here ? 
    } 
} 

Trả lời

5

Application_Error là nơi cuối cùng mà bạn có thể ghi ngoại lệ xảy ra trước khi luồng (đang phục vụ yêu cầu của bạn) bị hủy bỏ.

Bạn không cần phải loại trừ bất kỳ ngoại lệ nào vì nó sẽ tự động thực hiện sau khi thoát khỏi hàm.

Đây là một hợp lý implementation của nó.

Tôi nghĩ rằng mối quan tâm lớn nhất của bạn là phải làm gì nếu cơ chế thất bại của bạn không thành công. Trong trường hợp này, đó là đăng nhập của bạn. Đây là một câu hỏi lớn hơn trong máy tính nhưng việc xây dựng chuỗi thất bại trên các cơ chế thường là lãng phí thời gian bởi vì cuối cùng mọi thứ có thể không thành công (đề xuất phụ cho nghiên cứu của riêng bạn: cố gắng giữ mọi thứ không trạng thái). Bạn đặt cược tốt nhất là có một cơ chế khai thác gỗ rất đáng tin cậy như là phương sách cuối cùng của bạn sẽ thành công 99,9% thời gian. Sẽ không đi vào cách tạo cơ chế như vậy (và bạn không nên tự mình làm - tạo trình ghi nhật ký của riêng bạn vì có rất nhiều thủ thuật để biết chắc rằng việc ghi nhật ký của bạn đủ hiệu quả và không gây khó chịu) nhưng nói chung tôi khuyên bạn nên sử dụng elmah, có khả năng khung khai thác gỗ tốt nhất hiện có sẵn & nó sẽ phục vụ mục đích của bạn.

Đối với số lượng rất nhỏ các lỗi có thể gặp phải (mà chúng có thể sẽ không xảy ra trong tình huống thực tế), tôi sẽ không mất ngủ trên chúng.

0
  • Bạn có muốn ném Server.GetLastException() sau khi đăng nhập? Nó phụ thuộc vào bản chất và nguyên nhân của ngoại lệ đó. Tôi muốn hiển thị nó ở vị trí đặc biệt hoặc cửa sổ bật lên
  • Nếu ném một ngoại lệ xảy ra, cố gắng ghi lại ngoại lệ đó? Sau đó, chắc chắn bạn có thể muốn nuốt nó