我正在编写自定义记录器后端。我查看了其他后端,例如:控制台,LoggerFileBackend,Timber.LoggerBackends.HTTP,Logger.Backends.Gelf。
其中一些,例如:console和Timber.LoggerBackends.HTTP的初始化为{__MODULE__, options}
。其他一些对象,例如LoggerFileBackend和Logger.Backends.Gelf都使用{__MODULE__, name}
进行了初始化。
问题:系统如何正确知道并调用init(...)
作为后端?
谢谢,
琳。
答案 0 :(得分:2)
我知道发生了什么事。
我们在配置文件中配置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 \\ [])