2009-08-27 6 views

Trả lời

16

Trong Application_BeginRequest, làm

MDC.Set("addr", Request.UserHostAddress); 

và sau đó đảm bảo rằng PatternLayout của bạn có chứa %X{addr} đâu đó trong chuỗi mẫu.

Cập nhật: Như Tadas đã chỉ ra, trong các phiên bản mới hơn của log4net tương đương là

ThreadContext.Properties["addr"] = Request.UserHostAddress; 

cùng với %P{addr} trong chuỗi mẫu.

+1

Tuyệt vời! Cảm ơn. Tôi chỉ muốn lưu ý rằng lớp MDC không được chấp nhận (http://svn.apache.org/repos/asf/logging/site/trunk/docs/log4net/release/sdk/log4net.MDC.html) và chuyển tiếp đến ThreadContext. Tính chất. –

+0

Đẹp - Tôi đã làm điều này trong một kiếp trước, nhưng đã quên mất như thế nào. +1 –

+0

Hãy coi chừng tính năng nhanh nhẹn của chủ đề asp.net ': nó đánh bại bối cảnh log4net. Xem [blog này] (http://piers7.blogspot.com/2005/12/log4net-context-problems-with-aspnet.html) và [câu trả lời này] (http://stackoverflow.com/a/9000825/ 1178314) về một câu hỏi khác để biết thêm chi tiết. –

19

Với log4net 1.2.11 (tháng 10 năm 2011), bạn thêm dòng sau vào bố trí mô hình của bạn:

%aspnet-request{REMOTE_ADDR} 

Hoặc cho người dùng hiện:

%aspnet-request{AUTH_USER} 

Xem https://issues.apache.org/jira/browse/LOG4NET-87 để biết thêm về các mới chuyển đổi các mẫu asp.net (% aspnet-cache,% aspnet-context và% aspnet-request).

+0

Nhìn vào các nhận xét jira, có vẻ như nó thiếu sự hỗ trợ của các trình bổ sung đệm như AdoNetAppender, khi kích thước bộ đệm lớn hơn 1. Bạn đã sử dụng chúng với các trình bổ sung như vậy chưa? –