NLog MappedDiagnosticsLogicalContext.SetScoped для нескольких ключей - PullRequest
1 голос
/ 11 июля 2019

При обработке сообщений из очереди я хотел бы отслеживать несколько параметров для каждого сообщения - его идентификатор, имя пользователя и т. Д.Исходя из моих выводов MappedDiagnosticsLogicalContext.SetScoped должно работать, есть ли способ установить несколько ключей одновременно?Количество таких полей варьируется в зависимости от известных условий, поэтому мне нужен помощник, который устанавливает все поля одновременно.К сожалению, текущий API не разрешает составление, поэтому следующая попытка не удалась:

    public static IDisposable SetContext(this Dictionary<string, string> fieldValues)
    {
        IDisposable result = null;

        foreach (var pair in fieldValues)
        {
            result = MappedDiagnosticsLogicalContext.SetScoped(pair.Key, pair.Value);
        }

        return result;
    }

Этот метод удаляет только последний добавленный ключ, все предыдущие остаются там.Базовые API метода SetScoped являются внутренними для NLog, поэтому я не могу их легко вызвать.Любые предложения о том, как заставить это работать?

1 Ответ

2 голосов
/ 11 июля 2019

Обновление до NLog ver. 4.6.5 позволит вам использовать этот метод:

IDisposable MappedDiagnosticsLogicalContext.SetScoped(IReadOnlyList<KeyValuePair<string,object>> items);

Вы можете назвать это так:

MappedDiagnosticsLogicalContext.SetScoped(fieldValues);

Но ваши значения поля должны быть типа Dictionary<string, object>

...