У меня такая ситуация:
В приложении Phoenix у меня есть некоторая защищенная информация, и я хочу по-разному регистрировать эту информацию в разных местах.
Например:
EncryptedLogger => Записать в LoggerBackend 1 => записать в машину 1
PlainLogger => Записать в LoggerBacken 2 => записать в машину 2
LoggerBackend 1 и LoggerBackend 2 могут относиться к одному и тому же типу пользовательского бэкэнда регистратора, но могут быть настроены по-разному для указания на компьютер 1 и компьютер 2 соответственно. Эту часть я уже сделал.
Я не знаю, как это сделать:
Как подключить EncryptedLogger только к Backend 1 и PlainLogger только к Backend 2.
Мы знаем, что для Elixir вызов Logger запишет информацию во все бэкэнды, которые указаны в конфигурации приложения. В настоящее время любой вызов любого регистратора будет записываться как в Backend 1, так и в Backend 2.
Вопрос:
Можно ли легко подключить определенные регистраторы только к определенным бэкэндам?
(Не все бэкэнды)
Вот требования:
1- Сохраните как можно больше вызовов, которые регистрирует Logger в коде. У нас в коде много вызовов Logger, поэтому в идеале мы должны изменять только минимальные вызовы журнала, которые регистрируют информацию PHI. Другие звонки должны просто работать.
2- Для каждого вызова Logger, например Logger.debug(“Call list_user:” … whatever users list from database here)
, он должен выполнять следующие действия:
- Войдите на чрезвычайно защищенный сервер журналов PHI, отправьте только информацию, которая является PHI, поэтому мы не будем избыточно записывать информацию, не относящуюся к PHI.
- Записаться на сервер журналов не-PHI: вся нефизическая информация хранится как есть, а вся фи-информация хранится с фи-данными, замаскированными как «*»
3- Все текущие бэкэнды средства ведения журнала, например: бэкэнды логгера.
4- Когда люди добавляют дополнительные бэкэнды Logger для входа в различные сервисы, например Timber или Spark, они должны быть включены в задачи PHI - Non PHI без проблем. Если они неправильно настроили регистратор, информация PHI не должна оставаться там без масок. И существующие вызовы Logger в текущем коде приложения не должны быть изменены.
5- Когда программные инженеры вызывают в коде ошибки Logger.info, Logger.debug, Logger.error, информация PHI не может быть случайно пропущена.
Например, какой-нибудь существующий код или новый код, подобный этому: Logger.error(“Error updating user: #{inspect(user)})
автоматически распечатывает замаскированную версию данных для регистрации вместо оригинала.