Alguien me corrige si me equivoco, pero un subproceso ASP.NET puede manejar varias sesiones, por lo que no puede usar Session_Start como se llama una vez cuando se inicia la sesión. Lo que significa es que tan pronto como un usuario diferente acceda al sitio web, su log4net.ThreadContext puede sobrescribirse con la nueva información del usuario.
Puede colocar el siguiente código en Application_AcquireRequestState, o crear un HttpModule y hacerlo en el método AcquireRequestState. Se llama a AcquireRequestState cuando el tiempo de ejecución de ASP.NET está listo para adquirir el estado de sesión de la solicitud HTTP actual. Si está interesado en obtener un nombre de usuario, puede hacerlo en AuthenticateRequest que se genera cuando el tiempo de ejecución de ASP.NET está listo para autenticar la identidad del usuario (y antes de AcquireRequestState).
private void AcquireRequestState(Object source, EventArgs e)
{
HttpApplication application = (HttpApplication)source;
HttpContext context = application.Context;
log4net.ThreadContext.Properties["SessionId"] = context.Session.SessionID;
}
Después de eso, puede configurar su log4net.config (o en web.config) de esta manera.
<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>
Hope this helps!
Tengo el mismo problema: http://stackoverflow.com/questions/8985693/how-to-use-aspnet-session-pattern-layout – mynkow
Tengo la respuesta a continuación. Si ayuda, vuélvela. Las personas que no entienden la situación lo han desvalorizado. http://stackoverflow.com/a/24048883/3481183 – Believe2014
No debe registrar ID de sesión ya que las personas con acceso a los archivos de registro podrían secuestrar sesiones. ¡Al menos hash la ID de la sesión antes de iniciar sesión! – Kutzi