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

标签 c# .net asp.net-mvc-3 log4net

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

<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>

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

WindowsIdentity.GetCurrent().Name

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

关于我们如何在不创建自定义属性或额外的 log4net 派生类的情况下在 web.config 中轻松解决此问题的任何想法?如果可能的话,否则如果自定义属性是我们可以忍受的唯一方式,我想 :) 谢谢!

最佳答案

%username 替换为 %identity 应该可以。它在我当前的项目中对我有用。

您可以通过 this 了解更多关于 log4net 的信息 优秀教程

关于c# - 如何使用 Log4Net 在日志文件中获取当前用户名而不是 AppPool 标识,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11541289/

相关文章:

c# - 如何在asp.net中集成openinviter代码?

c# - 我的 Access 数据库不更新 (ASP.NET)

c# - 在 Asp Core 2 View 中访问 Session 对象

c# - 替换 Uri 中的主机

c# - 将模型传递给局部 View ?

c# - 将表单数据发送到 ASP.net MVC 3 中的 Controller 操作有哪些不同的方法?

c# - 使用 INotifyPropertyChanged 的​​静态属性。 C#

.net - 我应该使用哪种依赖注入(inject)工具?

c# - 如何从委托(delegate)获取 C# 函数中的地址?

asp.net-mvc - 验证 Mvc 中的日期格式