使用log4net和ASP.NET跟踪会话变量

pro*_*dad 5 asp.net log4net session-variables

我们的Web应用程序捕获用户的登录信息并将其存储在会话变量中,类似于Session("User_Id").我想使用log4net来捕获日志中的用户.

我看到一些使用MDC(Mapped Diagnostic Context)的引用已经被ThreadContext属性所取代.

有没有人实现这个ThreadContext方法?有什么建议?

pro*_*dad 4

在代码中...

log4net.ThreadContext.Properties["Log_User"] = userName;
Run Code Online (Sandbox Code Playgroud)

在 web.config 中

<appender name="ADONetAppender" type="log4net.Appender.ADONetAppender">
  <bufferSize value="1" />
  <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
  <connectionString value="set in global.asax" />
  <commandText value="INSERT INTO Log4Net ([Log_Date], [Severity],[Application],[Message], [Source], [Log_User]) VALUES (@log_date, @severity, @application, @message, @source, @currentUser)" />
  <parameter>
    <parameterName value="@log_date" />
    <dbType value="DateTime" />
    <layout type="log4net.Layout.RawTimeStampLayout" />
  </parameter>
    ...
  <parameter>
    <parameterName value="@currentUser" />
    <dbType value="String" />
    <size value="100" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%property{Log_User}" />
    </layout>
  </parameter>
</appender>
Run Code Online (Sandbox Code Playgroud)

  • 如果一个请求由多个线程处理,则这将不起作用,请参阅:http://www.2geeks1rant.com/2010/11/log4net-contextual-properties-and.html (3认同)