【问题标题】:Logging username with Elmah for WCF Webservices使用 Elmah 为 WCF Webservices 记录用户名
【发布时间】:2011-04-24 03:59:21
【问题描述】:

我们正在使用here 描述的方法通过 Elmah 记录我们的 Web 服务错误。这确实有效,但遗憾的是登录的用户名是空的。

我们进行了一些调试,发现当在 ErrorHandler 中记录错误时,HttpContext.Current.User 具有正确的用户集。

我们也试过了:

HttpContext context = HttpContext.Current;
ErrorLog.GetDefault(context).Log(new Error(pError, context));

ErrorLog.GetDefault(null).Log(new Error(pError));

没有成功。

关于如何让 Elmah 记录用户名的任何想法?

在旁注中,当直接在 Web 服务中记录错误时,用户名会按预期记录。但采用这种方法并不是很干燥。

【问题讨论】:

    标签: asp.net wcf exception logging elmah


    【解决方案1】:

    Elmah 从Thread.CurrentPrincipal.Identity.Name 而非HttpContext.Current.User 获取用户。

    由于没有方便的方法将自定义数据添加到 Elmah,我建议重新编译代码,并改为调用 HttpContext.Current.User。

    【讨论】:

    • 由于 ThreadPooling 设置 Pricipal 是否正确:`Thread.CurrentPrincipal = new GenericPrincipal(new GenericIdentity("lala"),new string[0])' 是个坏主意?跨度>
    • 如果我在使用 elmah 记录错误后将其设置回旧的 Principal?
    【解决方案2】:

    这是一个我反复看到的问题。虽然重新编译代码是可能的,但我宁愿建议使用已经内置在 ELMAH 中的功能,如我的博客文章 Enrich ELMAH errors using error filtering hook 中所述。

    在您的情况下,为所有错误设置User 属性,可以通过添加ErrorLog_Filtering-方法来实现:

    void ErrorLog_Filtering(object sender, ExceptionFilterEventArgs args)
    {
        var httpContext = args.Context as HttpContext;
        if (httpContext != null)
        {
            var error = new Error(args.Exception, httpContext);
            error.User = httpContext.User.Identity.Name;
            ErrorLog.GetDefault(httpContext).Log(error);
            args.Dismiss();
        }
    }
    

    【讨论】:

      【解决方案3】:

      作为重新编译 Elmah 的替代方法,我们可以使用全局方法,该方法在调用 elmah 之前填充 Thread.CurrentPrincipal.Identity.Name。

      public static void LogError(Exception exception, string username)
      {
          Thread.CurrentPrincipal = new GenericPrincipal(new GenericIdentity(username), new string[] {});
          Elmah.ErrorSignal.FromCurrentContext().Raise(exception);
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-10-28
        • 1970-01-01
        • 2012-08-11
        • 2017-06-30
        • 2018-03-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多