NLog структурирование логирования маскирование - PullRequest
1 голос
/ 20 апреля 2020

Предположим, мы пишем следующее структурированное сообщение журнала

logger.Info("User's Password is {Password}", "1234567890");

Я хотел бы замаскировать свойство пароля, потому что это конфиденциальные данные. Я нашел эту проблему , но я думаю, что это очень трудный путь.

Например, я нашел расширение , которое решает аналогичную задачу для serilog. Это очень просто в использовании. Но я не нашел никакой полезной информации для Nlog.

Как этого добиться с помощью библиотеки nlog? Буду признателен за любые предложения.

1 Ответ

1 голос
/ 21 апреля 2020

Вы можете использовать RegisterObjectTransformation, , представленные в NLog 4.7 .

Например:

LogManager.Setup().SetupSerialization(s => 
    s.RegisterObjectTransformation<object>(o =>
    {
        var props = o.GetType().GetProperties();
        var propsDict = props.ToDictionary(p => p.Name, p => p.GetValue(o));

        propsDict.Remove("password"); // remove not needed.

        return propsDict;
   }));

Обратите внимание, что с точки зрения производительности вам может понадобиться что-то как кеш отражения и умные оптимизации.

...