我正在使用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);
}
有帮助吗? 谢谢。
答案 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;