Ví dụ: chúng tôi muốn ghi lại đầu ra YSOD để sử dụng trong email báo cáo erorr, từ trình xử lý lỗi Global.asax. Có cách nào tận dụng máy phát điện ysod tích hợp không?Màn hình màu vàng của cái chết (YSOD) có thể được tạo ra theo yêu cầu hoặc bị bắt không?
Trả lời
Có cách bạn có thể thực hiện việc này.
Trong sự kiện Application_Error trên toàn cầu.asax tập tin, có được ngoại lệ cuối cùng như là một System.HttpUnhandledException. Mã của bạn sẽ trông giống như sau:
var lastException = Server.GetLastError() as HttpUnhandledException;
string Ysod = lastException.GetHtmlErrorMessage();
// your call to emailing routine follows
Tôi đồng ý với nhận xét của người khác. Bạn cũng có thể làm điều này với ELMAH.
Bạn nên kiểm tra ELMAH nó thực hiện những gì bạn đang yêu cầu tự động.
Tôi sẽ nói chung, bạn không muốn người dùng trải nghiệm YSOD. Đây là thứ tôi đã đưa vào các ứng dụng web trước đây để ghi lại lỗi và sau đó cho phép trang lỗi duyên dáng hơn cho người dùng ...
protected void Application_Error(object sender, EventArgs e)
{
MailMessage msg = new MailMessage();
HttpContext ctx = HttpContext.Current;
msg.To.Add(new MailAddress("[email protected]"));
msg.From = new MailAddress("[email protected]");
msg.Subject = "My app had an issue...";
msg.Priority = MailPriority.High;
StringBuilder sb = new StringBuilder();
sb.Append(ctx.Request.Url.ToString() + System.Environment.NewLine);
sb.Append("Source:" + System.Environment.NewLine + ctx.Server.GetLastError().Source.ToString());
sb.Append("Message:" + System.Environment.NewLine + ctx.Server.GetLastError().Message.ToString());
sb.Append("Stack Trace:" + System.Environment.NewLine + ctx.Server.GetLastError().StackTrace.ToString());
msg.Body = sb.ToString();
//CONFIGURE SMTP OBJECT
SmtpClient smtp = new SmtpClient("myhost");
//SEND EMAIL
smtp.Send(msg);
//REDIRECT USER TO ERROR PAGE
Server.Transfer("~/ErrorPage.aspx");
}
Bạn đã nghe nói về ELMAH chưa? Nó có thể cung cấp cho bạn tất cả các tính năng mà bạn thực sự muốn ...
Đây là một bài viết trên blog rằng giải thích một chút về nó: http://www.hanselman.com/blog/ELMAHErrorLoggingModulesAndHandlersForASPNETAndMVCToo.aspx
tôi sẽ nhìn vào ELMAH (Error Logging Modules and Handlers for ASP.NET):
ELMAH (Lỗi Logging Mô-đun và Bộ xử lý ) là một lỗi ứng dụng rộng cơ sở ghi nhật ký hoàn toàn là có thể cắm được. Nó có thể được thêm động vào một ứng dụng web ASP.NET đang chạy, hoặc thậm chí tất cả các ứng dụng web ASP.NET trên máy, mà không cần phải biên dịch lại hoặc tái triển khai .
Khi ELMAH đã bị rơi vào một ứng dụng web chạy và cấu hình một cách thích hợp, bạn sẽ có được tiện ích sau đây mà không thay đổi một dòng mã của bạn:
- Đốn và cung cấp gần như tất cả trường hợp ngoại lệ unhandled.
- Trang web để xem từ xa toàn bộ nhật ký của các ngoại lệ được mã hóa lại.
- Trang web để xem từ xa chi tiết đầy đủ của bất kỳ chi tiết nào đã đăng nhập ngoại lệ.
- Trong nhiều trường hợp, bạn có thể xem lại màn hình màu vàng nguyên bản của cái chết mà ASP.NET đã tạo cho một ngoại lệ nhất định, ngay cả khi chế độ CustomErrors bị tắt.
- Thông báo e-mail của từng lỗi tại thời điểm xảy ra lỗi.
- Nguồn cấp dữ liệu RSS trong 15 lỗi cuối cùng từ nhật ký.
Sự kiện Application_Error trong tệp Global.asax được kích hoạt bất cứ khi nào ngoại lệ chưa được giải quyết xảy ra trong ứng dụng. Bạn có thể lấy ngoại lệ cuối cùng đã xảy ra bằng phương thức Server.GetLastError().
Tương tự, bạn có thể tạo trang lỗi tùy chỉnh của riêng bạn bằng cách chỉ định trang web đó trong web.config trong phần customErrors trong tệp web.config. Bằng cách chỉ định một tệp mặc định, bạn có thể thực hiện bất kỳ mã hóa tùy chỉnh nào khi một ngoại lệ được định tuyến ở đó.
- 1. Có thực hiện ở đâu đó của màn hình màu vàng của cái chết không?
- 2. CakePHP Màn hình trắng của cái chết
- 3. Màn hình màu vàng chết của ASP.NET - nó sẽ lấy dấu vết từ đâu?
- 4. Logging tất cả các màn hình màu vàng của người chết, ngay cả khi một vấn đề biên soạn
- 5. Theo dõi cái chết của một tiến trình con
- 6. Không thể yêu cầu lại toàn màn hình chrome
- 7. PHP - thoát hoặc chết() trong các yêu cầu AJAX?
- 8. Chụp ảnh màn hình theo chương trình không nắm bắt được nội dung của surfaceVIew
- 9. CQRS: Đọc mô hình được xây dựng theo yêu cầu?
- 10. Màu/mờ có thể vẽ trên màn hình
- 11. Tạo Hibernate-Session theo yêu cầu
- 12. XNA 3.1 đến 4.0 yêu cầu vẽ lại liên tục hoặc hiển thị màn hình màu tía
- 13. Sọc 2 màu nền có hoặc không có hình ảnh?
- 14. Bắt buộc một trường không được yêu cầu
- 15. Nút html có thể tạo trước yêu cầu POST không?
- 16. PHP Không theo yêu cầu
- 17. Thông số yêu cầu RSpec/Capybara Yêu cầu - Không thể đưa ra để POST phiên người dùng mới
- 18. Chụp màn hình màn hình hiện tại của thiết bị
- 19. Không thể gán địa chỉ được yêu cầu - nguyên nhân có thể xảy ra?
- 20. Màn hình đăng nhập có thể tạo bảng phân cảnh?
- 21. Cửa sổ trong suốt (hoặc Vẽ ra màn hình) Không có Chuột chụp
- 22. hộp thoại jqueryui cho màn hình màu xám ra
- 23. Linq2XSD có bị chết không?
- 24. Có thang màu tốt hơn so với bản đồ màu "cầu vồng" không?
- 25. AppDomains có được tạo cho mọi yêu cầu không?
- 26. "Tệp chưa được biên dịch trước và không thể yêu cầu"
- 27. Chụp màn hình android và tạo video theo chương trình
- 28. Nút yêu cầu - Cách xác định xem có xảy ra lỗi trong khi yêu cầu không?
- 29. Bắt quá trình node.js chết?
- 30. Có thể tiếp quản toàn bộ màn hình của nhiều màn hình với .NET trên Windows không?
3 năm và ai biết lý do tại sao tôi không muốn sử dụng ELMAH, nhưng đây là câu trả lời tôi chắc chắn đang tìm kiếm. Không muốn mất một sự phụ thuộc trong một dự án bận rộn đã tràn ngập với các mô-đun bên thứ 3 tôi đoán. – nicknystrom
Chính xác những gì tôi đang tìm kiếm là tốt, tôi sử dụng Elmah trong dự án của tôi, nhưng trong trường hợp khi người dùng là một quản trị viên, tôi muốn hiển thị YSOD chi tiết không chỉ là thông báo lỗi thân thiện. –
Tôi đã sử dụng Elmah, trên các dự án khác, nhưng trong trường hợp này cụ thể, tôi muốn kiểm soát lỗi ghi nhật ký, vì sh! T vừa quá nghiêm trọng, ngay cả đối với Elmah! Điều này trả lời đúng câu hỏi ban đầu và vẫn đứng ngày hôm nay * thở dài * – ppumkin