我已经设置了log4net并正在使用WCF服务的数据库记录器。如果在每种方法中都包含以下内容,则会记录(调用者的)正确的Windows用户名:
ThreadContext.Properties("user") = Thread.CurrentPrincipal.Identity.Name
如果我使用OperationContext.Current.ServiceSecurityContext.WindowsIdentity.Name,我还将针对日志条目获取正确的用户名。
我试图通过在服务类构造函数中的GlobalContext级别进行设置来消除对每个方法进行设置的要求,如下所示:
Public Sub New()
GlobalContext.Properties("user") = OperationContext.Current.ServiceSecurityContext.WindowsIdentity.Name
log4net.Config.XmlConfigurator.Configure()
End Sub
但是,这似乎不能始终如一地工作,有时日志条目具有调用者的Windows用户名,而其他时候则是Web服务器的计算机帐户(DOMAIN \ server $)。这是log4net问题还是WCF?构建WCF服务时,如何强制记录调用方Windows用户名?