Как включить область ведения журнала в файл журнала с помощью NLog

Я использую NLog.Extensions.Logging.

При регистрации фабрики логгеров методом AddNLog(), можно включить область ведения журнала, используя NLogProviderOptions.IncludeScopes.

Но как заставить NLog записывать в файл область логирования?

Ничего подобного в списке доступных раскладок не нашел

2 ответа

Решение

Пример:

Зарегистрируйтесь так:

// 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: Я обновил доступные макеты, чтобы вам было проще:)

Новое (в V5) заключается в использовании${scopenested}.

См. https://github.com/NLog/NLog/wiki/ScopeNested-Layout-Renderer .

Другие вопросы по тегам