在另一个模块上调用erlang应用程序

时间:2014-10-11 05:30:58

标签: erlang lager

我正在尝试使用“ Lager ”(记录器应用程序)。 Lager是从主要应用程序模块“A”

启动的

以下是.app文件中指定的lager:

{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编写日志:

lager:info("here is something to the log ~p", ["SomeString"]),

上面的失败,不知何故。我原以为“lager”是一个引用ErlangVM上运行的已注册应用程序的原子。不知怎的,似乎并非如此。这是失败消息:

{undef,[{lager,info,["here is something to the log ~p",[["Something"]]],[]},{

是否存在限制流程树中应用程序可见性的事情

1 个答案:

答案 0 :(得分:1)

实际上,要使用lager:infolager: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

中所述