Кто-то исправляет меня, если я ошибаюсь, но один поток ASP.NET может обрабатывать несколько сеансов, поэтому вы не можете использовать Session_Start, поскольку он вызывается один раз при запуске сеанса. Это означает, что, как только другой пользователь получит доступ к веб-сайту, ваш журнал log4net.ThreadContext может быть перезаписан новой информацией пользователя.
Вы можете поместить указанный ниже код в Application_AcquireRequestState или создать HttpModule и сделать это в методе AcquireRequestState. AcquireRequestState вызывается, когда среда выполнения ASP.NET готова к получению состояния сеанса текущего HTTP-запроса. Если вы заинтересованы в получении имени пользователя, вы можете сделать это в AuthenticateRequest, который возникает, когда среда выполнения ASP.NET готова аутентифицировать личность пользователя (и до AcquireRequestState).
private void AcquireRequestState(Object source, EventArgs e)
{
HttpApplication application = (HttpApplication)source;
HttpContext context = application.Context;
log4net.ThreadContext.Properties["SessionId"] = context.Session.SessionID;
}
После этого вы можете настроить свой файл log4net.config (или в web.config) следующим образом.
<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>
Надеюсь, что это поможет!
У меня такая же проблема: http://stackoverflow.com/questions/8985693/how-to-use-aspnet-session-pattern-layout – mynkow 2012-05-28 11:29:46
У меня есть ответ ниже. Если это поможет, пожалуйста, поддержите его. Люди, которые не понимают ситуацию, ее нивелируют. http://stackoverflow.com/a/24048883/3481183 – Believe2014 2014-06-05 03:51:04
Вам не следует регистрировать идентификаторы сеансов, так как люди, имеющие доступ к лог-файлам, могут захватывать сеансы. По крайней мере, hash идентификатор сеанса, прежде чем регистрировать его! – Kutzi 2015-11-27 16:25:15