2013-05-01 23 views
7

Tôi chạy tập lệnh ELMAH sql trong DB thử nghiệm (Nó tạo ra bảng ELmah_Error và 3 thủ tục lưu sẵn) và cấu hình ELMAH trong ứng dụng MVC bằng Nuget.ELMAH cho ASP.NET MVC 4 sử dụng SQL SERVER 2008 R2

tôi sửa đổi web.config theo quy định và tôi có thể đăng nhập ngoại lệ vào

http://mysite/elmah.axd 

Nhưng, thay vì tôi muốn ghi lại những trường hợp ngoại lệ vào Sql Server.

tôi đã thêm bên dưới lớp để đạt được điều đó

public class ElmahHandleErrorAttribute : System.Web.Mvc.HandleErrorAttribute 
{ 
    public override void OnException(System.Web.Mvc.ExceptionContext context) 
    { 
     LogException(e); 
    } 
    private static void LogException(Exception e) 
    { 
     // Call to Database and insert the exception info 
    } 
} 

Bước cuối cùng là:

public static void RegisterGlobalFilters(GlobalFilterCollection filters) 
{ 
    filters.Add(new ElmahHandleErrorAttribute()); 
} 

Đó có phải là cách chính xác để sử dụng ELMAH để đăng nhập tất cả các trường hợp ngoại lệ hay tôi thiếu cái gì?

Trả lời

11

Một khi bạn đã thiết lập cơ sở dữ liệu, tất cả các bạn cần làm là thêm dòng sau vào phần <elmah> web.config của bạn để thiết lập các ELMAH để đăng nhập vào cơ sở dữ liệu SQL:

<elmah> 
     <errorLog type="Elmah.SqlErrorLog, Elmah" connectionStringName="<DBConnString>" 
      applicationName="<YourApp>" 
    </elmah> 

Thay <DBConnString><YourApp> với các giá trị thích hợp cho cấu hình của bạn.

Khi bạn đã thực hiện việc này, bạn sẽ không cần sử dụng lớp ElmahHandleErrorAttribute tùy chỉnh của mình.

Tôi không chắc chắn gói NuGet bạn đã cài đặt, nhưng tôi khuyên bạn nên sử dụng gói Elmah.MVC vì nó tích hợp Elmah vào MVC đặc biệt tốt bằng cách thiết lập tất cả ErrorHandlers và ErrorFilters cho bạn.

+1

Còn cấu hình elmah hiện có thì sao? Elmah sẽ tạo ra các bảng cần thiết? – Rahatur

+7

Không elamh sẽ không tự động tạo các bảng hiện có. Tuy nhiên, bạn có thể tải xuống tập lệnh để làm điều đó cho loại và phiên bản cơ sở dữ liệu của bạn từ https://code.google.com/p/elmah/wiki/Downloads trong phần cơ sở dữ liệu. –

+0

Tôi tin rằng đó là tên chuỗi kết nối (như được định nghĩa trong phần web.config ), không phải là chuỗi kết nối, mà nằm trong giá trị connectionStringName = "". – Bern