2009-08-27 121 views

回答

16

Application_BeginRequest,做

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

,然後確保你的PatternLayout包含%X{addr}某處模式字符串。

更新:作爲塔達斯所指出的,在較新版本的log4net的等效是

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

加上模式字符串%P{addr}

+1

太棒了!謝謝。我只想指出MDC類已被棄用(http://svn.apache.org/repos/asf/logging/site/trunk/docs/log4net/release/sdk/log4net.MDC.html)並轉發給ThreadContext。屬性。 – 2009-08-27 12:32:52

+0

不錯 - 我以前做過這個,但忘記了。 +1 – 2009-10-07 09:12:49

+0

請注意asp.net的「線程敏捷性」功能:它會破壞log4net上下文。看[這個博客](http://piers7.blogspot.com/2005/12/log4net-context-problems-with-aspnet.html)和[這個答案](http://stackoverflow.com/a/9000825/ 1178314)關於另一個問題的更多細節。 – 2015-08-31 10:16:27

19

隨着log4net的1.2.11(2011年10月)添加以下到您的模式佈局:

%aspnet-request{REMOTE_ADDR} 

或當前用戶:

%aspnet-request{AUTH_USER} 

有關新的更多信息,請參見https://issues.apache.org/jira/browse/LOG4NET-87 asp.net模式轉換器(%aspnet-cache,%aspnet-context和%aspnet-request)。

+0

看着jira的評論,它看起來像緩衝區大小超過1時,它缺乏支持緩衝appender,如AdoNetAppender。你用它們與這樣的appender? – 2015-08-31 10:19:42