Пример:
Журнал так:
// logger is here of type Microsoft.Extensions.Logging.ILogger
using (logger.BeginScope(new[] { new KeyValuePair<string, object>("userid", request.UserId) }))
{
logger.LogDebug("My log message");
}
Визуализация так: ${mdlc:userid}
.
Например, в целевом файле:
<target name="file" xsi:type="File"
layout="${longdate} ${logger} ${message}${exception:format=ToString}, user: ${mdlc:userid}"
fileName="${basedir}/${shortdate}.log" />
Примечание: NLogProviderOptions.IncludeScopes
включено по умолчанию.
NLog напрямую
Синтаксис немного неуклюже, но это потому, что абстракция Microsoft немного ограничена. См. Также эту проблему: . NET - регистрация структурированных данных без их появления в текстовом сообщении
Если вы напрямую ссылаетесь на NLog, вы также можете сделать:
using (NLog.MappedDiagnosticsLogicalContext.SetScoped("userid", request.UserId))
{
// logger here of type NLog.Logger
logger.Info("My log message");
}
Также это отображается с ${mdlc:userid}
Дополнительные примеры и различные области действия для NLog объяснены здесь
Документы
PS: я обновил доступных макетов , чтобы вам было проще:)