【发布时间】:2009-06-02 07:46:11
【问题描述】:
我的 ASP.NET 站点正在使用集成身份验证,但模拟已关闭。我在 web.config 中的“conversionPattern”中添加了一个“%username”,以将用户名添加到每个日志记录条目。但是,这将使用应用程序池身份的用户名,而不是当前访问用户的名称。
关于如何最好地做到这一点的任何想法?我必须编写自定义附加程序吗?我不介意任何轻微的性能损失,因为这是一个小型 Intranet 站点。谢谢!
【问题讨论】:
我的 ASP.NET 站点正在使用集成身份验证,但模拟已关闭。我在 web.config 中的“conversionPattern”中添加了一个“%username”,以将用户名添加到每个日志记录条目。但是,这将使用应用程序池身份的用户名,而不是当前访问用户的名称。
关于如何最好地做到这一点的任何想法?我必须编写自定义附加程序吗?我不介意任何轻微的性能损失,因为这是一个小型 Intranet 站点。谢谢!
【问题讨论】:
在最新版本的 log4net 中内置了 ASP.NET 模式转换器:
%aspnet-request{REMOTE_ADDR} and %aspnet-request{AUTH_USER}
https://stackoverflow.com/a/7788792/74585
您还可以访问的内容
https://logging.apache.org/log4net/log4net-1.2.13/release/sdk/log4net.Layout.PatternLayout.html
【讨论】:
您可能想要查看的另一种(更简单的)解决方案是使用ThreadContext 类(以前实现为MDC 和NDC 类)。在您记录第一条消息之前,您可以在 HttpModule(在请求到达您的页面之前)或其他任何地方拥有类似的内容:
ThreadContext.Properties["user"] = username;
然后在你的conversionPattern中包含以下内容:
%property{user}
【讨论】: