Elixir: Как я могу подключить регистратор к определенному бэкэнду регистратора - PullRequest
1 голос
/ 21 июня 2019

У меня такая ситуация:

В приложении 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)}) автоматически распечатывает замаскированную версию данных для регистрации вместо оригинала.

Ответы [ 2 ]

1 голос
/ 21 июня 2019

В настоящее время это невозможно. Мое предложение состояло бы в том, чтобы обойти инфраструктуру Logger и напрямую вызывать и записывать в EncryptedFile / EncryptedBackend.

0 голосов
/ 04 июля 2019

Вот мое решение этой проблемы: http://hanoian.com/content/index.php/28-elixir-logger-to-different-backends-selectively-with-different-info

Все объяснение довольно длинное, с github-ссылкой на демо. Но суть его в том, что он создал прокси-сервер для приема всех вызовов Logger, а затем прокси-сервер будет по-разному вызывать разные бэкэнды для отправки разных типов информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...