2012-02-28 13 views
9

Tôi muốn email chỉ được gửi về một điều kiện cụ thể và lỗi đăng nhập trong DB trong mọi trường hợp. Nhưng như tôi hiểu, lọc không thể làm việc cho một trong hai. Có đúng không? Nếu vậy thì làm thế nào tôi có thể đạt được nó?Làm thế nào để đăng nhập tất cả các lỗi trong DB nhưng lỗi email chỉ trên cơ sở có điều kiện?

Cũng cần lưu ý rằng, ngay bây giờ I'm saving additional info to database trên ErrorMail_Mailing trong global.asax như được trả lời bởi Atif Aziz. Bởi vì email sẽ chỉ được gửi trên cơ sở có điều kiện và ErrorMail_Mailing chỉ kích hoạt trong khi gửi email, tôi tự hỏi làm thế nào tôi có thể lưu thông tin bổ sung của tất cả các lỗi vào cơ sở dữ liệu.

CẬP NHẬT:
Tôi đã sửa đổi mã Elmah một chút để thỏa mãn nhu cầu của mình.

Trả lời

0

Nếu bạn muốn lưu tất cả các ngoại lệ đối với các cơ sở dữ liệu bạn chỉ nên có thể sử dụng các ErrorLogModule như vậy mà nên không phụ thuộc vào những gì bạn đang làm trong các mô-đun email lỗi:

<add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" preCondition="managedHandler" /> 

và sau đó trong bảo vệ elmah của bạn đối với cấu hình của bạn:

<errorLog type="Elmah.SqlErrorLog, Elmah" connectionStringName="MyConnectionString" /> 
+0

Sau đó gửi email thì sao? Ngay bây giờ tôi đã lấy mã nguồn của ELMAH và sửa đổi nó cho mục đích của tôi. Nhưng nó đang mất thời gian. – IsmailS

2

Bước đầu tiên là định cấu hình mô-đun. Hãy chắc chắn rằng bạn thêm Elmah.ErrorFilterModule sau khi bất kỳ các module khai thác gỗ từ ELMAH, như thể hiện ở đây với ErrorLogModule:

<httpModules> 
    ...  
    //email 
    <add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah"/> 
    //sql 
    <add name="ErrorSql" type="Elmah.SqlErrorLog, Elmah"/> 
    <add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah"/> 

    ... 
</httpModules> 

Sau đó, trong phần cấu hình của bạn đăng ký Elmah.ErrorFilterSectionHandler như ở đây:

<configSections> 
    <configSections> 
     <sectionGroup name="elmah"> 
      <section name="errorFilter" type="Elmah.ErrorFilterSectionHandler, Elmah"/> 
     </sectionGroup> 
    </configSections> 

Bây giờ bạn có thể thêm bộ lọc để quyết định lỗi nào sẽ bị bỏ qua cho nguồn nào. Ví dụ sau cho thấy cách ngăn chặn các lỗi 404 HTTP được gửi qua thư.

<elmah> 
    <errorMail from="[email protected]" fromName="xx" to="[email protected]" subject="An unhandled exception occured xxx" priority="Normal" async="false" smtpServer="xx.xx.xx.com"/> 
    //sql 
    <errorLog name="ErrorSql" type="Elmah.SqlErrorLog, Elmah" connectionStringName="MyConnectionString" /> 
    <add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah"/> 
    <errorFilter> 
     <test> 
      <and> 
       <equal binding="HttpStatusCode" value="404" type="Int32" /> 
       <regex binding="FilterSourceType.Name" pattern="mail" /> 
      </and> 
     </test> 
    </errorFilter> 
</elmah> 

Bạn có thể tìm hiểu thêm thông tin chi tiết về liên kết sau.

http://code.google.com/p/elmah/wiki/ErrorFiltering

0

Bạn nên thử các StackExchange.Exceptional

Dự án này được lấy cảm hứng từ ELMAH, nhưng nó không phù hợp với đặc biệt nhu cầu của chúng tôi cho khối lượng rất, rất cao lỗi đăng nhập khi một mạng- cấp độ sự kiện xảy ra.

StackExchange.Exception là trình xử lý lỗi được sử dụng nội bộ bởi Stack Exchange và Stack Overflow để đăng nhập vào SQL.

Nó cũng hỗ trợ các cửa hàng lỗi JSON và bộ nhớ, lọc ngoại lệ trước khi đăng nhập và các cơ chế lỗi/thử lại để lưu lỗi nếu có sự gián đoạn trong việc kết nối với kho lưu trữ lỗi.

Tùy biến cao và thật dễ dàng để thêm thứ gì đó theo nhu cầu của bạn. Vì tôi có thể thấy yêu cầu kéo có chức năng email được triển khai Email functionality để bạn có thể bắt đầu từ đó.

Để thiết lập, bạn chỉ cần xem số web.config và chọn nội dung để bật.

Hy vọng điều đó sẽ hữu ích.

+0

Cảm ơn rất nhiều vì câu trả lời chi tiết. Tôi đã sửa đổi mã Elmah một chút để đáp ứng nhu cầu của tôi. – IsmailS

1

Tài liệu ELMAH trên error filteringsection về chính xác trường hợp của bạn và được gọi là số tiền filtering by source. Ví dụ: thông báo sau sẽ ngăn lỗi 404 HTTP được gửi nhưng chúng sẽ vẫn được ghi nhật ký (giả sử cả hai mô-đun gửi thư và đăng nhập được đăng ký):

<errorFilter> 
    <test> 
     <and> 
      <equal binding="HttpStatusCode" value="404" type="Int32" /> 
      <regex binding="FilterSourceType.Name" pattern="mail" /> 
     </and> 
    </test> 
</errorFilter>