这是我能想到的最基本的应用程序,我不明白为什么应用程序模块功能的 start/2 不会记录消息。这是我所做的:
1)应用配置文件(test_app.app):
{application,test_app,
[{description,"Test App"},
{vsn,0.9},
{applications,[kernel,stdlib]},
{modules,[test_app,log_utils]},
{registered,[test_app]}]}.
2)应用程序模块(test_app.erl):
-module(test_app).
-behaviour(application).
-export([start/2, stop/1]).
-export([test/0]).
start(_Type, _Args) ->
log_utils:info("here at APP START 1"),
master_sup:start_link({10,20,30}).
stop(_State) ->
ok.
test() ->
log_utils:info("here at APP START 2"),
master_sup:start_link({10,20,30}).
然后我这样编译和测试:
1> application:start(test_app).
ok
2> test_app:test().
==INFO REPORT==== 27-Oct-2013::19:53:29 ===
"here at APP START 2"
我所期望的是 application:start(test_app) 将执行 start/2 函数并以与 test/0 函数类似的方式记录消息。
事实上,我有一个更复杂的例子,我启动了一个主管,但同样,我在 app 模块中创建的 API 会导致一个错误,表明 start_link 不起作用。如果我调用一个启动主管的测试函数,那么它就可以工作。