Вызов приложения 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

Другие вопросы по тегам