Tôi đã sử dụng log4net để đăng nhập thông điệp nhật ký của trang web ASP.NET của chúng tôi và gần đây tôi muốn thêm thông tin về trang/trình xử lý nơi xảy ra lỗi. Vì vậy, tôi quyết định thêm dòng sau vào Global.asax:Làm thế nào để đặt thuộc tính ngữ cảnh log4net cụ thể cho một yêu cầu ASP.NET?
void Application_BeginRequest(object sender, EventArgs e)
{
log4net.ThreadContext.Properties["page"] = HttpContext.Current.Request.AppRelativeCurrentExecutionFilePath;
}
và như khôn ngoan tôi đã thêm %property{page}
để mô hình chuyển đổi của tôi:
<conversionPattern value="%newline%date %-5level %property{page} - %message%newline%newline%newline" />
này làm việc tốt cho các yêu cầu duy nhất. Nhưng sau đó tôi nhận thấy trong các bản ghi của tôi rằng thuộc tính trang có thể thay đổi trong một yêu cầu ASP.NET. Tôi đã đăng nhập vào một trình xử lý ASHX và ở giữa quá trình xử lý, thuộc tính trang sẽ thay đổi thành một giá trị khác trỏ đến trang ASPX. Tôi kết luận rằng có một yêu cầu khác đến với ASP.NET và BeginRequest
của nó được thực thi và thuộc tính trang tĩnh trong log4net.ThreadContext
được thay đổi thành một giá trị khác.
Bây giờ, tôi muốn duy trì thuộc tính trang cho mỗi yêu cầu, để tôi có thể có đường dẫn của trang thực thi đăng nhập vào nhật ký một cách nhất quán. Tôi đã cố gắng tìm một câu trả lời, nhưng tôi không có gì. Cách được khuyến nghị để giải quyết vấn đề này là gì? Tôi chắc rằng đây là chức năng rất cơ bản của việc ghi nhật ký sự kiện máy chủ web.
Đây là thiên tài. –