Tôi muốn giới thiệu gói cuộc gọi tới Elmah trong một lớp trình 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 đăng nhập lỗi.
try {
...
}
catch (Exception ex)
{
// log this and continue
ErrorLog.LogError(ex, "Error sending email for order " + orderID);
}
này có các 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 Cốt lõi từ mỗi một - và chỉ cần đặt này trong của riêng bạn 'Hệ thống' DLL.
- Nếu bạn cần thực hiện bất kỳ thao tác đặc biệt nào hoặc chỉ muốn đặt điểm ngắt để gỡ lỗi bạn có tất cả ở một nơi.
- Nếu bạn di chuyển khỏi Elmah, bạn chỉ có thể thay đổi một địa điểm.
- Nếu bạn có nhật ký lỗi kế thừa bạn muốn giữ lại (tôi chỉ xảy ra một cơ chế ghi 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).
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 mở các ngoại lệ, vì vậy ngoại lệ cơ bản sẽ vẫn được báo cáo trong nhật ký nhưng contextualMessage sẽ hiển thị khi bạn nhấp vào nó.
Nguồn
2013-02-08 10:09:23
Để tham khảo trong tương lai, tôi đã viết một bài về chính xác điều đó: [Lỗi ghi nhật ký lập trình] (http://docs.elmah.io/logging-errors-programmatically/). [Hướng dẫn ELMAH] của tôi (http://blog.elmah.io/elmah-tutorial/) cũng có một số thông tin về điều này. – ThomasArdal