2009-08-27 3 views
13

Я ищу способ включения ведения журнала IP-адресов с помощью log4net в ASP.NET. Я нашел один solution, но он работает на уровне приложения. Любые предложения/практики, как регистрировать IP на уровне сеанса?Как включить ведение журнала IP-адресов с помощью Log4Net

Благодаря

ответ

16

В Application_BeginRequest, сделать

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

и убедитесь, что ваш PatternLayout содержит %X{addr} где-то в строке шаблона.

Обновление: Как Tadas указал, в более новых версиях 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. Свойства. –

+0

Ницца - Я сделал это в предыдущей жизни, но забыл, как. +1 –

+0

Остерегайтесь функции agility от asp.net: он поражает контексты log4net. См. [Этот блог] (http://piers7.blogspot.com/2005/12/log4net-context-problems-with-aspnet.html) и [этот ответ] (http://stackoverflow.com/a/9000825/ 1178314) по другому вопросу для более подробной информации. –

19

С log4net 1.2.11 (октябрь 2011) добавить следующие строки в ваш шаблон макета:

%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, похоже, что им не хватает поддержки буферизованных приложений, таких как AdoNetAppender, когда размер буфера больше 1. Используете ли вы их с такими добавками? –

Смежные вопросы