Ktoś mnie koryguje, jeśli się mylę, ale jeden wątek ASP.NET może obsłużyć wiele sesji, więc nie można używać Session_Start, ponieważ jest on wywoływany raz, gdy sesja się rozpoczyna. Oznacza to, że gdy tylko inny użytkownik uzyska dostęp do strony internetowej, twój log4net.ThreadContext może zostać nadpisany przez informacje nowego użytkownika.
Możesz umieścić poniższy kod w Application_AcquireRequestState lub utworzyć moduł HttpModule i zrobić to w metodzie AcquireRequestState. Funkcja AcquireRequestState jest wywoływana, gdy środowisko wykonawcze ASP.NET jest gotowe do pobrania stanu sesji bieżącego żądania HTTP. Jeśli chcesz uzyskać nazwę użytkownika, możesz to zrobić w AuthenticateRequest, który jest wywoływany, gdy środowisko wykonawcze ASP.NET jest gotowe do uwierzytelnienia tożsamości użytkownika (i przed AcquireRequestState).
private void AcquireRequestState(Object source, EventArgs e)
{
HttpApplication application = (HttpApplication)source;
HttpContext context = application.Context;
log4net.ThreadContext.Properties["SessionId"] = context.Session.SessionID;
}
Po tym można skonfigurować plik log4net.config (lub w pliku web.config) w następujący sposób.
<appender name="rollingFile"
type="log4net.Appender.RollingFileAppender,log4net" >
<param name="AppendToFile" value="false" />
<param name="RollingStyle" value="Date" />
<param name="DatePattern" value="yyyy.MM.dd" />
<param name="StaticLogFileName" value="true" />
<param name="File" value="log.txt" />
<layout type="log4net.Layout.PatternLayout,log4net">
<param name="ConversionPattern"
value="%property{SessionId} %d [%t] %-5p %c - %m%n" />
</layout>
</appender>
Mam nadzieję, że to pomoże!
Mam ten sam problem: http://stackoverflow.com/questions/8985693/how-to-use-aspnet-session-pattern-layout – mynkow
Mam odpowiedź poniżej. Jeśli to pomoże, uproś to. Ludzie, którzy nie rozumieją tej sytuacji, go zignorowali. http://stackoverflow.com/a/24048883/3481183 – Believe2014
Nie należy rejestrować identyfikatorów sesji, ponieważ osoby mające dostęp do dzienników mogą przejąć sesje. Co najmniej hash identyfikator sesji przed zalogowaniem! – Kutzi