我的ASP.NET网站正在使用集成身份验证,并且已关闭模拟功能。我在web.config中的“conversionPattern”中添加了“%username”,以便为每个日志记录条目添加用户名。但是,这将使用应用程序池标识的用户名,而不是当前访问用户的名称。
关于如何做到这一点的任何想法?我必须写一个自定义的appender吗?我不介意任何轻微的性能损失,因为这是一个小型内部网站点。谢谢!
答案 0 :(得分:6)
最近版本的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
答案 1 :(得分:5)
您可能想要查看的另一种(更简单的)解决方案是使用ThreadContext
类(以前实现为MDC
和NDC
类)。您可以在HttpModule
内(在请求到达您的页面之前)或在您记录第一条消息之前的任何其他位置使用此类内容:
ThreadContext.Properties["user"] = username;
然后在convertPattern中包含以下内容:
%property{user}