如何使用Log4Net在日志文件中获取当前用户名而不是AppPool标识

Dav*_*ras 12 .net c# log4net asp.net-mvc-3

我们正在使用ASP.NET MVC3应用程序中的Log4Net,一切正常但我们希望在日志文件中看到当前用户名而不是应用程序池的标识,这是我们使用的appender配置:

<log4net>
    <appender name="FileAppender" type="log4net.Appender.RollingFileAppender">
      <threshold value="ALL" />
      <immediateFlush>true</immediateFlush>
      <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
      <encoding value="utf-8" />
      <file value="C:\Logs\MyLogs.log" />
      <appendToFile value="true" />
      <rollingStyle value="Date" />
      <maxSizeRollBackups value="30" />
      <maximumFileSize value="25MB" />
      <staticLogFileName value="true" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="[%property{log4net:HostName}] - %username%newline%utcdate - %-5level - %message%newline" />
      </layout>
    </appender>
    <root>
      <priority value="ALL" />
      <appender-ref ref="FileAppender" />
    </root>
</log4net>
Run Code Online (Sandbox Code Playgroud)

所以看起来像属性:%username正在检索以下值:

WindowsIdentity.GetCurrent().Name
Run Code Online (Sandbox Code Playgroud)

而不是我们需要的: HttpContext.Current.User

如何在web.config中轻松解决这个问题,而无需创建自定义属性或其他log4net派生类?如果可能的话,如果自定义属性是我们可以忍受的唯一方式,我猜:)谢谢!

Pie*_* SS 16

更换%username%identity应该这样做.它在我目前的项目中对我有用.

您可以通过这个优秀的教程了解有关log4net的更多信息