Бэкэнд Elixir logger: как система вызывает init ()? - PullRequest
0 голосов
/ 28 июня 2019

Я пишу пользовательский бэкэнд регистратора. Я смотрю на другие бэкэнды, например: консоль, LoggerFileBackend, Timber.LoggerBackends.HTTP, Logger.Backends.Gelf.

Некоторые из них, например: console и Timber.LoggerBackends.HTTP имеют init с {__MODULE__, options}. Некоторые другие, такие как LoggerFileBackend и Logger.Backends.Gelf имеют инициализацию с {__MODULE__, name}.

Вопрос: Как система знает и правильно вызывает init(...) для бэкэндов? Спасибо, Linh.

1 Ответ

2 голосов
/ 28 июня 2019

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

Например:

config :logger,
    backends: [:console ,{LoggerFileBackend, :app_log}, Timber.LoggerBackends.HTTP]

Тогда система вызовет init следующим образом:

# for console, it will call:
init(:console)

# for LoggerFileBackend, it will call with name set to ":app_log"
init({__MODULE__, name})

# for Timber.LoggerBackends.HTTP, it will call with options omitted
init(__MODULE__, options \\ [])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...