Как включить область ведения журнала в файл журнала с помощью 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 .