2010-09-28 27 views
11

Tôi hơi bối rối về cách thêm thông báo vào lỗi được ghi bằng chương trình với ELMAH.Elmah thêm thông báo vào lỗi khi đăng nhập cuộc gọi tới Raise (e)

ví dụ:

public ActionResult DoSomething(int id) 
{ 
    try { ... } 

    catch (Exception e) 
    { 
     // I want to include the 'id' param value here, and maybe some 
     // other stuff, but how? 
     ErrorSignal.FromCurrentContext().Raise(e); 
    } 
} 

Có vẻ như tất cả ELMAH có thể làm là đăng nhập trừ thô, làm thế nào có thể tôi cũng đăng thông tin gỡ lỗi của riêng tôi?

+1

tò mò tại sao Elmah không có quá tải cho Raise cho các tin nhắn bổ sung. thông tin theo ngữ cảnh là rất quan trọng khi cố sửa một số lỗi nhất định –

Trả lời

17

Bạn có thể ném một thiết lập ban đầu là ngoại lệ bên trong ngoại lệ mới và ELMAH sẽ đăng các thông điệp cho cả hai:

catch(Exception e) 
{ 
    Exception ex = new Exception("ID = 1", e); 
    ErrorSignal.FromCurrentContext().Raise(ex); 
} 

sẽ hiển thị

System.Exception: ID = 1 ---> System.NullReferenceException: Object reference not set to an instance of an object. 
+0

ý tưởng hay, nhờ – fearofawhackplanet

+0

hoạt động tuyệt vời! cảm ơn! –

+0

bạn nên sử dụng Exception.Data, nhưng theo mặc định, elmah không có chức năng này. Tôi đã thêm vào phiên bản tùy chỉnh mà tôi sử dụng. Tôi thực sự nên đăng mã lên một nơi nào đó. Tôi biết điều này là cũ nhưng tôi nghĩ rằng điều này là không chính xác 100%. Có, bạn có thể sử dụng điều này cho các chi tiết nhỏ, nhưng nếu bạn muốn có một danh sách dữ liệu đó là những gì Exception.Data được tạo ra. Ví dụ khi một SQLException được ném, bạn nhận được rất nhiều chi tiết. Tôi cũng đã thêm cái này. Nó không thực sự khó để làm cho mình. Ngoài ra khi làm việc với linq2sql bạn cũng có thể nhận được rất nhiều chi tiết. – pqsk

3

tôi thấy rằng tôi cũng có thể làm điều gì đó như:

Elmah.ErrorSignal.FromCurrentContext().Raise(new NotImplementedException("class  FbCallback.Page_Load() Request.Url= " + Request.Url)); 

Để đăng nhập thư của riêng tôi. Sau đó, khi tôi duyệt đến

http://localhost:5050/elmah.axd 

Tôi thấy thư của tôi là loại NotImplementedException. Không phải là rất đẹp nhưng hoạt động.

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