Вызов приложения erlang, запущенного на другом модуле
Я пытаюсь использовать " Lager" (приложение для ведения журнала). Лагер был запущен из основного модуля приложения "А"
Вот как был указан лагер в файле.app:
{application, myapp,
[
{description, ""},
{vsn, "1"},
{registered, []},
{applications, [kernel, stdlib]},
{mod, { ontoq, []}},
{env, [
{lager, [
{handlers, [
{lager_console_backend, info},
{lager_file_backend, [{file, "error.log"}, {level, error}]},
{lager_file_backend, [{file, "console.log"}, {level, info}]}
]}
]}
]
}
]}.
Я запускаю лагер из функции запуска моего приложения "A":
start(_StartType, _StartArgs) ->
random:seed(erlang:now()),
lager:start(),
lager:info("here is something to the log ~p", ["SomeString"]),
start_other_apps_that_call_module_B().
Я создал другой модуль проекта "B", который содержит просто простые модули Erlang (без приложений). Оттуда некоторые из моих функций пытаются написать журнал, используя лагер:
lager:info("here is something to the log ~p", ["SomeString"]),
Вышесказанное как-то не получается. Я ожидал бы, что "лагер" - это атом, который ссылается на зарегистрированное приложение, работающее на ErlangVM. Почему-то это не так. Это сообщение об ошибке:
{undef,[{lager,info,["here is something to the log ~p",[["Something"]]],[]},{
Существуют ли вещи, которые ограничивают видимость приложения в дереве процессов
1 ответ
На самом деле для использования lager:info
, lager:error
и т. д. и т. д. вам нужно скомпилировать исходный код {parse_transform, lager_transform}
, Вы можете установить его в своем модуле B (вставить строку в B.erl)
-compile([{parse_transform, lager_transform}]).
или просто передать параметр +{parse_transform, lager_transform}
на erlc, как описано в документации http://erlang.org/doc/man/erlc.html