0

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

以下是在 .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}]}
            ]}
          ]}
        ]
  }
 ]}.

我确实从我的 Application "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"]]],[]},{

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

4

1 回答 1

1

实际上,对于使用lager:info等,lager:error您需要使用 option 编译源代码 {parse_transform, lager_transform}。您可以在模块 B 中设置它(在 B.erl 中插入一行)

-compile([{parse_transform, lager_transform}]).

或者只是将参数传递+{parse_transform, lager_transform}给 erlc,如文档 http://erlang.org/doc/man/erlc.html中所述

于 2014-10-11T06:40:21.863 回答