Мы используем Serilog (должен быть более или менее эквивалентен NLog).Он имеет очень хорошую интеграцию с ILogger из ядра Aspnet.
Вы можете создать промежуточное ПО и использовать ILogger.BeginScope
public class LoggerMiddleware
{
private readonly RequestDelegate _next;
private readonly ILogger<LoggerMiddleware> _logger;
public LoggerMiddleware(RequestDelegate next, ILogger<LoggerMiddleware> logger)
{
_next = next;
_logger = logger;
}
public async Task Invoke(HttpContext context)
{
var dictionary = new Dictionary<string, object>
{
{ "Username", context.User?.Identity?.Name; }
};
using (_logger.BeginScope(dictionary))
{
await _next(context);
}
}
}
С нашей интеграцией с Serilog мы можем использовать Username
в наших шаблонах журналов, и оно сохраняется в течение всего HTTP-вызова (с разными потоками).
Ваша интеграция с NLog должна быть аналогичной после этой вики https://github.com/NLog/NLog.Web/wiki/Getting-started-with-ASP.NET-Core-2