Net Core NLog.Web“aspnet-user-identity”是空的?

时间:2016-11-21 08:02:11

标签: asp.net-core-mvc nlog

我使用“NLog.Extensions.Logging”进行日志记录并需要记录用户身份,并发现可以使用“NLog.Web.AspNetCore”。 “nlog.config”文件配置为记录“aspnet-user-identity”。但是,当我查看日志时,用户身份部分始终是空字符串,其他列看起来相当不错。我错过了什么吗?

我的配置文件的一部分在这里:

<extensions>
  <assembly="NLog.Web.AspNetCore" />
</extensions>

<parameter name="@identity" layout="${aspnet-user-identity}"/>

<logger name="*" minlevel="Trace" appendTo="database"/>

并且插入命令使用“@identity”参数将日志插入到db中,但它总是空的,就像我说的那样。

4 个答案:

答案 0 :(得分:3)

我想我已经找到了这个问题,

发生了重大变化,IHttpContextAccessor服务不再默认注册。 (See announcement

添加你的startup.cs:

public void ConfigureServices(IServiceCollection Services)
{
    //call this in case you need aspnet-user-authtype/aspnet-user-identity
    services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
}

答案 1 :(得分:3)

对于我的案例,接受的答案不起作用(在ASP.NET Core 3.1上使用JwtSecurityToken), 后来意识到我只是忘了在我的JwtSecurityToken声明上添加ClaimTypes.Name。

现在可以正常工作了,不需要注册IHttpContextAccessor。

答案 2 :(得分:0)

我在搜索“ asp.net core nlog用户名”时发现了这个问题。最终,我找到了解决方案,并将其记录在后头。

问题

如何在NLog日志消息中包括当前登录用户的用户名?

解决方案

我在ASP.NET Core Web应用程序内使用NLog。我尝试使用${aspnet-user-identity}布局渲染器,但由于使用自定义身份验证,因此确定该值为空。

进行一些挖掘之后,我发现可以从NLog访问存储为ASP.NET Session变量的值。因此,在对用户进行身份验证之后,我将其用户名填充到会话变量中,瞧!

这是验证用户身份后我调用的代码:

// Store username in session so we can access it from NLog logs.
httpContext.Session.SetString("NlogUser", contact.Username);

这是nlog.config中的布局渲染器行的样子

这是AspNetSession layout renderer的相应NLog文档。

答案 3 :(得分:0)

如果您最近升级了ASP.NET Core,则可能必须在program.cs中配置不同的NLog:

public class Program
{
    public static void Main(string[] args)
    {
        CreateHostBuilder(args).Build().Run();
    }
    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder
                    .CaptureStartupErrors(true)
                    .UseIISIntegration()
                    .UseContentRoot(Directory.GetCurrentDirectory())
                    .UseStartup<Startup>()
                    .ConfigureLogging((hostingContext, logging) =>
                    {
                        //logging.AddNLog(); //<--- Can remove (NLog.Extensions.Logging)
                    })
                    ;
            })
            .UseNLog(); // <--- Call UseNLog off of IHostBuilder (NLog.Web)
}

请参阅https://github.com/NLog/NLog/wiki/Getting-started-with-ASP.NET-Core-3