Tôi khuyên bạn nên kết thúc cuộc gọi đến Elmah trong một lớp bao bọc đơn giản của riêng bạn.
using Elmah;
public static class ErrorLog
{
/// <summary>
/// Log error to Elmah
/// </summary>
public static void LogError(Exception ex, string contextualMessage=null)
{
try
{
// log error to Elmah
if (contextualMessage != null)
{
// log exception with contextual information that's visible when
// clicking on the error in the Elmah log
var annotatedException = new Exception(contextualMessage, ex);
ErrorSignal.FromCurrentContext().Raise(annotatedException, HttpContext.Current);
}
else
{
ErrorSignal.FromCurrentContext().Raise(ex, HttpContext.Current);
}
// send errors to ErrorWS (my own legacy service)
// using (ErrorWSSoapClient client = new ErrorWSSoapClient())
// {
// client.LogErrors(...);
// }
}
catch (Exception)
{
// uh oh! just keep going
}
}
}
Sau đó, chỉ cần gọi nó bất cứ khi nào bạn cần phải đăng nhập một lỗi.
try {
...
}
catch (Exception ex)
{
// log this and continue
ErrorLog.LogError(ex, "Error sending email for order " + orderID);
}
Điều này có những lợi ích sau:
- Bạn không cần phải nhớ cú pháp hơi cổ xưa này của cuộc gọi Elmah
- Nếu bạn có nhiều DLL, bạn không cần phải tham khảo Elmah Core từ mỗi một tệp - và chỉ cần đặt tệp này vào DLL 'Hệ thống' của riêng bạn.
- Nếu bạn cần thực hiện bất kỳ xử lý đặc biệt nào hoặc chỉ muốn đặt một điểm dừng để gỡ lỗi, bạn có tất cả một nơi.
- Nếu bạn rời khỏi Elmah, bạn có thể thay đổi một nơi.
- Nếu bạn có bản ghi lỗi kế thừa mà bạn muốn giữ lại (tôi tình cờ có một cơ chế ghi nhật ký lỗi đơn giản được gắn vào một số UI mà tôi không có thời gian để xóa ngay lập tức).
Lưu ý: Tôi đã thêm thuộc tính 'contextualMessage' cho thông tin theo ngữ cảnh. Bạn có thể bỏ qua điều này nếu bạn thích nhưng tôi thấy nó rất hữu ích. Elmah tự động hủy bỏ các ngoại lệ để ngoại lệ cơ bản vẫn sẽ được báo cáo trong nhật ký nhưng ngữ cảnh sẽ được hiển thị khi bạn nhấp vào nó.