MvvmCross: добавление свойств в трассировку IMvxLog без использования их в сообщении - PullRequest
0 голосов
/ 06 августа 2020

Как лучше всего добавить свойства к трассе, чтобы они отображались как именованные свойства? Для конкретности я использую Serilog, а для добавления свойств в оператор журнала (которые указаны c в оператор журнала) я считаю, что я могу либо использовать их в строке формата, либо использовать

using(logProvider.OpenMappedContext(key, value))
{
   // do some logging
}

Теперь все становится странно, если у меня есть какое-то перечисление свойств. Я бы хотел иметь возможность просто использовать словарь, но я не вижу для этого функциональных возможностей. Я также предпочел бы, чтобы все мои многочисленные случаи использования журнала не загромождались произвольным количеством операторов using. Итак, я получил это:

/// parameters is a Dictionary<string, string> 
...
var disposables = Enumerable.Empty<IDisposable>();

try
{
    if (parameters != null)
    {
        disposables = parameters.Select(p => logProvider.OpenMappedContext(p.Key, p.Value)).ToArray();
    }

    // do some logging
}
finally
{
    foreach (var disposable in disposables)
    {
        disposable.Dispose();
    }
}

В документах Microsoft я прочитал, что 'using (...)' эквивалентно заключению в try-finally, чтобы убедиться, что ресурсы удалены. . Но когда я использую приведенный выше код с Serilog и MvvmCross (6.3.x), некоторые (но не все) свойства сохраняются от оператора журнала к оператору журнала, тогда как у меня никогда не было такой проблемы с помещением OpenMappedContext в оператор using. Итак, два вопроса:

Как правильно добавлять именованные свойства, которые не являются частью отформатированной строки сообщения? Есть идеи, почему существует несоответствие в том, как эти ресурсы очищаются?

...