如何从ServiceStack.Logging获取当前用户

时间:2018-06-26 17:52:21

标签: c# asp.net logging servicestack log4net

我正在使用ASP.NET MVC和servicestack.logging 我用过log4net。

我需要获取已通过servicestack-jwt身份验证的当前用户。

在我的webconfig中使用下面的代码,我只是获得 windows 个当前用户。

  <appender type="log4net.Appender.RollingFileAppender" name="User_Log">
  <file value="C:\logging\user_log\" />
  <datePattern value="dd.MM.yyyy'.log'" />
  <appendToFile value="true" />
  <rollingStyle value="Composite" />
  <maxSizeRollBackups value="10" />
  <maximumFileSize value="10MB" />
  <staticLogFileName value="false" />

  <layout type="log4net.Layout.PatternLayout">
     <header type="log4net.Util.PatternString" value="[START LOG] %newline" />
     <footer type="log4net.Util.PatternString" value="[END LOG] %newline" />
    <conversionPattern value="[%property{log4net:HostName}] - [%username] - [%identity] - [%w] -%identity%newline%utcdate - %-5level - %message%newline" />
  </layout>

我还在Global.asax中使用了以下代码

       protected void Application_Start()
    {

        ServiceStack.Logging.LogManager.LogFactory = new ServiceStack.Logging.Log4Net.Log4NetFactory(true);

        //I can save test
        Logger.InfoFormat("test");

        string name = "";
        HttpContext context = HttpContext.Current;
        if (context != null && context.User != null && context.User.Identity.IsAuthenticated)
        {
            name = context.User.Identity.Name;
        }
        //I can NOT save name
        _logger.InfoFormat(name);

    }

有帮助吗? 谢谢。

1 个答案:

答案 0 :(得分:0)

ServiceStack中,已验证的用户是stored in the UserSession,可从IRequest.GetSession()访问。如果使用像ASP.NET Framework这样的AppHost以HttpContext.Current单例形式维护当前的HttpContext,则可以通过以下方式访问它:

var req = HostContext.TryGetCurrentRequest();
var session = req.GetSession();
var userName = session.UserAuthName;