我正在尝试使用“ 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"]]],[]},{
是否存在限制流程树中应用程序可见性的事情
答案 0 :(得分: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