Asp.net 使用log4net跟踪网站用户

Asp.net 使用log4net跟踪网站用户,asp.net,log4net,Asp.net,Log4net,我在基于asp.net的网站上搜索跟踪用户的最佳方式。 我们使用log4net来记录一些业务操作(在此页面上输入,单击按钮等)。但对于多个用户,日志文件无法轻松读取。 因此,我需要在配置文件中添加一个属性“UserName”,如下所示: <conversionPattern value="%date [%thread] - %property{UserName} - %-5level - %logger - %message%newline"/> 您知道如何设置“用户名”吗

我在基于asp.net的网站上搜索跟踪用户的最佳方式。
我们使用log4net来记录一些业务操作(在此页面上输入,单击按钮等)。但对于多个用户,日志文件无法轻松读取。

因此,我需要在配置文件中添加一个属性“UserName”,如下所示:

 <conversionPattern value="%date [%thread] - %property{UserName} - %-5level  - %logger - %message%newline"/>

您知道如何设置“用户名”吗?


感谢您的帮助

这里有以下酒店

   %username the Windows identity of user making the log entry; slow 
查看更多详细信息:

查看本文:

您可以像这样定义用户名(或任何其他)属性:

this.SetThreadContext("UserName", userName);
public void SetUserName(Func<string> getUserName)
假设
userName
包含用户的名称

编辑(您真正想做的事情):

为log4net编写一个包装器(带接口),并制作一些方法,例如
SetUserName
,如下所示:

this.SetThreadContext("UserName", userName);
public void SetUserName(Func<string> getUserName)
public void SetUserName(Func getUserName)

您在应用程序启动时调用此方法,并传递一些返回当前登录用户的方法(从HttpContext)。您需要将委托存储在某个位置,可能是一个静态变量。然后您就有了各种级别的日志记录方法,每个方法都会调用委托(
Func getUserName
),并设置线程上下文属性,如上所示。通过这种方式,您不必在每次调用logger之前手动设置thread context属性…

,只有在使用集成windows身份验证时,该属性才会起作用,否则您只需获得应用程序运行时所使用的标识即可。