2008-08-15 35 views
25

Tôi đang tìm cách tốt nhất để ghi lỗi trong ứng dụng ASP.NET. Tôi muốn có thể nhận email khi có lỗi xảy ra trong đơn đăng ký của mình, với thông tin chi tiết về Ngoại lệ và Yêu cầu hiện tại.Làm thế nào để bạn đăng nhập lỗi (ngoại lệ) trong ứng dụng ASP.NET của bạn?

Trong công ty của tôi, chúng tôi đã từng có ErrorMailer riêng của mình, thu hút mọi thứ trong Global.asax Application_Error. Đó là "Ok" nhưng không phải là rất linh hoạt cũng không thể cấu hình.

Gần đây, chúng tôi đã chuyển sang NLog. Đó là cấu hình nhiều hơn nữa, chúng tôi có thể xác định các mục tiêu khác nhau cho các lỗi, lọc chúng, đệm chúng (chưa thử). Đó là một cải tiến rất tốt.

Nhưng gần đây tôi đã phát hiện ra rằng có toàn bộ Không gian tên trong khung .Net cho mục đích này: System.Web.Management và có thể được định cấu hình trong phần healthMonitoring của web.config.

Bạn đã bao giờ làm việc với giám sát sức khỏe .Net chưa? Giải pháp khắc phục lỗi của bạn là gì?

+0

Tôi cũng đã thấy System.Web.Management, nhưng tôi chưa bao giờ sử dụng nó. Tôi rất muốn nghe bất kỳ phản hồi nào về việc liệu nó có hoạt động tốt hay không. –

Trả lời

27

Tôi sử dụng elmah. Nó có một số tính năng thực sự tốt đẹp và đây là một bài viết CodeProject trên đó. Tôi nghĩ nhóm StackOverflow cũng sử dụng elmah!

+4

Tôi đã viết [Hướng dẫn ELMAH] (http://blog.elmah.io/elmah-tutorial/) năm ngoái, mà tôi nghĩ mô tả kịch bản này chi tiết hơn bài viết CodeProject. – ThomasArdal

0

Chúng tôi sử dụng tùy chỉnh ghi nhật ký nhà vườn sử dụng, chúng tôi đã viết. Nó đòi hỏi bạn phải thực hiện đăng nhập trên của riêng bạn ở khắp mọi nơi bạn cần nó. Nhưng, nó cũng cho phép bạn nắm bắt được nhiều hơn chỉ là ngoại lệ.

Ví dụ mã của chúng ta sẽ trông như thế này:

Try 
    Dim p as New Person() 
    p.Name = "Joe" 
    p.Age = 30 
Catch ex as Exception 
    Log.LogException(ex,"Err creating person and assigning name/age") 
    Throw ex 
End Try 

Bằng cách này logger của chúng tôi sẽ viết tất cả những thông tin chúng ta cần một cơ sở dữ liệu SQL. Chúng tôi đã thiết lập cảnh báo qua email ở cấp DB để tìm các lỗi nhất định hoặc các lỗi thường xuyên xảy ra. Nó giúp chúng tôi xác định chính xác vị trí của các lỗi.

Đây có thể không chính xác những gì bạn đang tìm kiếm. Một cách tiếp cận khác tương tự như việc sử dụng Global.asax là cho chúng tôi một kỹ thuật tiêm mã như AOP với PostSharp. Điều này cho phép bạn chèn mã tùy chỉnh ở đầu và cuối của mọi phương thức hoặc trên mọi ngoại lệ. Đó là một cách tiếp cận thú vị nhưng tôi tin rằng nó có thể có một chi phí hiệu suất cao.

0

Nhóm của tôi sử dụng log4net từ Apache. Nó khá nhẹ và dễ cài đặt. Hơn hết, nó hoàn toàn có thể cấu hình từ tệp web.config, vì vậy khi bạn đã có móc trong thiết lập mã, bạn hoàn toàn có thể thay đổi cách ghi nhật ký được thực hiện chỉ bằng cách thay đổi tệp web.config.

log4net hỗ trợ đăng nhập vào nhiều địa điểm khác nhau - cơ sở dữ liệu, email, tệp văn bản, nhật ký sự kiện Windows, v.v. Đội của tôi đã cấu hình để gửi thông tin lỗi chi tiết tới cơ sở dữ liệu và gửi email cho toàn bộ nhóm với đủ thông tin để chúng tôi xác định phần nào của mã mà lỗi bắt nguồn. Sau đó, chúng tôi biết ai chịu trách nhiệm về đoạn mã đó và họ có thể truy cập cơ sở dữ liệu để có thêm thông tin chi tiết.

2

Tôi đã sử dụng đối tượng Ghi nhật ký của Thư viện doanh nghiệp. Nó cho phép bạn có các kiểu ghi khác nhau (tệp phẳng, e-mail và/hoặc cơ sở dữ liệu). Nó khá tùy biến và có một giao diện khá tốt để cập nhật web.config của bạn cho cấu hình của việc ghi nhật ký. Thông thường tôi gọi đăng nhập của tôi từ On Error trong Global.asax.

Here's a link to the MSDN

+0

Tôi đã buộc phải sử dụng thư viện MS Enterprise Library cho một dự án khoảng một năm trước. Nó rất phức tạp và, tôi không thể nhớ chính xác chi tiết, nhưng nó thiếu một số chức năng tối thiểu mà người ta mong đợi trong một giải pháp đăng nhập. Có một add-in cho Visual Studio đó là về cách duy nhất để có được web.config thiết lập chính xác. Công cụ đó định dạng lại web.config của bạn và xóa tất cả các nhận xét ra khỏi nó :( – TechSavvySam

9

Tôi đã sử dụng Log4net, cấu hình để gửi email chi tiết về lỗi gây tử vong. Nó cũng được thiết lập để đăng nhập tất cả mọi thứ vào một tệp nhật ký, đó là vô giá khi cố gắng gỡ lỗi các vấn đề. Lợi ích khác là nếu chức năng tiêu chuẩn đó không làm những gì bạn muốn, nó khá dễ dàng để viết một appender tùy chỉnh mà có thể xử lý thông tin đăng nhập theo yêu cầu. Có nói rằng, tôi đang sử dụng điều này song song với một trình xử lý lỗi tùy chỉnh gửi ra một email html với nhiều thông tin hơn là được bao gồm trong email log4net tiêu chuẩn - trang, biến phiên, cookie, biến http máy chủ , vv

Cả hai đều được kết nối trong sự kiện Application_OnError, trong đó ngoại lệ được ghi lại dưới dạng ngoại lệ chết người trong log4net (sau đó được gửi đến địa chỉ email được chỉ định) và cũng được xử lý bằng lỗi tùy chỉnh xử lý.

Lần đầu tiên nghe nói về Elmah từ mục nhập blog Horror Horror, Crash Responsibly và mặc dù có vẻ hứa hẹn tôi chưa triển khai bất kỳ dự án nào.

+0

+1 Không thể tự nói tốt hơn! –

0

Gần đây tôi đã xây dựng một dịch vụ web asp.net với NLog, mà tôi sử dụng cho tất cả các ứng dụng dành cho máy tính để bàn của mình. Việc ghi nhật ký hoạt động tốt khi tôi đang gỡ lỗi trong Visual Studio, nhưng ngay sau khi tôi chuyển sang IIS tệp nhật ký không được tạo; Tôi chưa xác định được lý do tại sao, nhưng thực tế là tôi cần phải tìm một giải pháp làm cho tôi muốn thử một cái gì đó khác cho nhu cầu asp.net của tôi!

2

Tôi sử dụng log4net và bao giờ tôi mong đợi ngoại lệ, tôi đăng nhập vào cấp thích hợp. Tôi có xu hướng không ném lại ngoại lệ vì nó không thực sự cho phép trải nghiệm người dùng tốt, có ít thông tin bạn có thể cung cấp ở trạng thái hiện tại.

Tôi sẽ có Application_Error cũng được cấu hình để bắt bất kỳ ngoại lệ nào không được mong đợi và lỗi được ghi dưới dạng ưu tiên Fatal thông qua log4net (tốt, 404 được phát hiện và ghi lại là Thông tin vì chúng không phải là mức độ nghiêm trọng cao).

0

Chúng tôi sử dụng EnterpriseLibrary.ExceptionHandling.Logging. Tôi thích nó tốt hơn một chút so với log4net vì chúng tôi không chỉ kiểm soát hoàn toàn việc ghi nhật ký, mà còn có thể kiểm soát quyết định Throw/NoThrow trong cấu hình.

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