2009-08-27 5 views

Odpowiedz

16

W Application_BeginRequest, zrobić

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

a następnie upewnić się, że PatternLayout zawiera %X{addr} gdzieś w ciągu wzorca.

Aktualizacja: W Tadas wskazał, w nowszych wersjach log4net odpowiednikiem jest

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

połączeniu z %P{addr} w ciągu wzorca.

+1

Świetnie! Dzięki. Po prostu chcę zauważyć, że klasa MDC jest przestarzała (http://svn.apache.org/repos/asf/logging/site/trunk/docs/log4net/release/sdk/log4net.MDC.html) i przekazuje do ThreadContext. Nieruchomości. –

+0

Nice - Zrobiłem to w poprzednim życiu, ale zapomniałem jak. +1 –

+0

Uważaj na "zwinność wątku" asp.net: pokonuje konteksty log4net. Zobacz [ten blog] (http://piers7.blogspot.com/2005/12/log4net-context-problems-with-aspnet.html) i [tę odpowiedź] (http://stackoverflow.com/a/9000825/ 1178314) na inne pytanie, aby uzyskać więcej szczegółów. –

19

Z log4net 1.2.11 (paź 2011) dodać następujące do układu Wzór:

%aspnet-request{REMOTE_ADDR} 

Albo dla bieżącego użytkownika:

%aspnet-request{AUTH_USER} 

https://issues.apache.org/jira/browse/LOG4NET-87 Zobacz więcej informacji na temat nowego konwertery wzorców asp.net (% aspnet-cache,% aspnet-kontekst i% -na-aspnet-request).

+0

Patrząc na komentarze w jirach, wygląda na to, że brakuje im buforowanych aplikacji, takich jak AdoNetAppender, gdy rozmiar bufora jest większy niż 1. Czy używałeś ich z takimi aplikacjami? –