Ejabberd调试
Ejabberd debugging
我想对我正在使用的 Ejabberd 模块进行一些调试;然而,由于我正在 Windows 工作,所以我最好的选择就是通过日志记录。
我无法进行日志记录。我正在使用 error_logger:warning_msg("here!")
,但是我在日志中看不到它。
我检查了 ejabberd.log
和 error.log
。
欢迎任何有关 ejabberd 调试或日志记录的想法。正如我所说,我正在研究 Windows.
更新
我更改了我的代码,现在看起来像这样:
start(Host, Opts) ->
?DEBUG("Starting: ~p ~p", [Host, Opts]),
Proc = gen_mod:get_module_proc(Host, ?MODULE),
ChildSpec = {
Proc,
{?MODULE, start_link, [Host, Opts]},
transient,
1000,
worker,
[?MODULE]
},
supervisor:start_child(ejabberd_sup, ChildSpec).
但是我收到这个错误
2015-09-14 17:01:11.863 [critical] <0.37.0>@gen_mod:start_module:107 Problem starting the module mod_restful for host <<"fernando">>
options: [{api,[[{path,[<<"admin">>]},
{module,mod_restful_admin},
{params,[{key,<<"secret">>},
{allowed_commands,[register,unregister]}]}],
[{path,[<<"register">>]},
{module,mod_restful_register},
{params,[{key,<<"secret">>}]}]]}]
error: undef
[{p1_logger,debug_msg,[mod_restful,80,"Starting: ~p ~p",["fer","fer"]],[]},
{mod_restful,start,2,
[{file,"d:/Sites/mod_restful/src/mod_restful.erl"},{line,80}]},
{gen_mod,start_module,3,[{file,"src/gen_mod.erl"},{line,99}]},
{lists,foreach,2,[{file,"lists.erl"},{line,1336}]},
{ejabberd_app,start,2,[{file,"src/ejabberd_app.erl"},{line,72}]},
{application_master,start_it_old,4,
[{file,"application_master.erl"},{line,272}]}]
2015-09-14 17:01:11.863 [critical] <0.37.0>@gen_mod:start_module:112 ejabberd initialization was aborted because a module start failed.
我刚刚从我的本地 ejabberd 安装中尝试,它正确地出现在 ejabberd.log
文件中:
2015-09-14 17:30:20.819 [warning] <0.36.0> here!
但是请注意,ejabberd 约定是使用如下宏:
?DEBUG(Format, Args).
?INFO_MSG(Format, Args).
?WARNING_MSG(Format, Args).
?ERROR_MSG(Format, Args).
?CRITICAL_MSG(Format, Args).
它与多个记录器后端(如 lager)兼容,并且对您在 ejabberd 中设置的错误级别友好。
添加
后工作正常
-ifndef(LAGER).
-define(LAGER, 1).
-endif.
包括库之前:
-include("ejabberd.hrl").
-include("logger.hrl").
-include("jlib.hrl").
默认情况下 debug
不起作用,只有 info
、warning
、error
和 critical
?DEBUG("Starting: ~p ~p", [Host, Opts]),
?INFO_MSG("Starting: ~p ~p", [Host, Opts]),
?WARNING_MSG("Starting: ~p ~p", [Host, Opts]),
?ERROR_MSG("Starting: ~p ~p", [Host, Opts]),
?CRITICAL_MSG("Starting: ~p ~p", [Host, Opts]),
您必须包含“-include("logger.hrl")”。到模块的顶部。这只会将宏定义告知 ejabberd。
您还可以使用“ejabberdctl set_loglevel 4”命令在 运行 时间内更改调试级别。
日志级别是:
0: 没有 ejabberd 日志
1:严重
2: 错误
3: 警告
4: 信息
5: 调试
我想对我正在使用的 Ejabberd 模块进行一些调试;然而,由于我正在 Windows 工作,所以我最好的选择就是通过日志记录。
我无法进行日志记录。我正在使用 error_logger:warning_msg("here!")
,但是我在日志中看不到它。
我检查了 ejabberd.log
和 error.log
。
欢迎任何有关 ejabberd 调试或日志记录的想法。正如我所说,我正在研究 Windows.
更新
我更改了我的代码,现在看起来像这样:
start(Host, Opts) ->
?DEBUG("Starting: ~p ~p", [Host, Opts]),
Proc = gen_mod:get_module_proc(Host, ?MODULE),
ChildSpec = {
Proc,
{?MODULE, start_link, [Host, Opts]},
transient,
1000,
worker,
[?MODULE]
},
supervisor:start_child(ejabberd_sup, ChildSpec).
但是我收到这个错误
2015-09-14 17:01:11.863 [critical] <0.37.0>@gen_mod:start_module:107 Problem starting the module mod_restful for host <<"fernando">>
options: [{api,[[{path,[<<"admin">>]},
{module,mod_restful_admin},
{params,[{key,<<"secret">>},
{allowed_commands,[register,unregister]}]}],
[{path,[<<"register">>]},
{module,mod_restful_register},
{params,[{key,<<"secret">>}]}]]}]
error: undef
[{p1_logger,debug_msg,[mod_restful,80,"Starting: ~p ~p",["fer","fer"]],[]},
{mod_restful,start,2,
[{file,"d:/Sites/mod_restful/src/mod_restful.erl"},{line,80}]},
{gen_mod,start_module,3,[{file,"src/gen_mod.erl"},{line,99}]},
{lists,foreach,2,[{file,"lists.erl"},{line,1336}]},
{ejabberd_app,start,2,[{file,"src/ejabberd_app.erl"},{line,72}]},
{application_master,start_it_old,4,
[{file,"application_master.erl"},{line,272}]}]
2015-09-14 17:01:11.863 [critical] <0.37.0>@gen_mod:start_module:112 ejabberd initialization was aborted because a module start failed.
我刚刚从我的本地 ejabberd 安装中尝试,它正确地出现在 ejabberd.log
文件中:
2015-09-14 17:30:20.819 [warning] <0.36.0> here!
但是请注意,ejabberd 约定是使用如下宏:
?DEBUG(Format, Args).
?INFO_MSG(Format, Args).
?WARNING_MSG(Format, Args).
?ERROR_MSG(Format, Args).
?CRITICAL_MSG(Format, Args).
它与多个记录器后端(如 lager)兼容,并且对您在 ejabberd 中设置的错误级别友好。
添加
后工作正常-ifndef(LAGER).
-define(LAGER, 1).
-endif.
包括库之前:
-include("ejabberd.hrl").
-include("logger.hrl").
-include("jlib.hrl").
默认情况下 debug
不起作用,只有 info
、warning
、error
和 critical
?DEBUG("Starting: ~p ~p", [Host, Opts]),
?INFO_MSG("Starting: ~p ~p", [Host, Opts]),
?WARNING_MSG("Starting: ~p ~p", [Host, Opts]),
?ERROR_MSG("Starting: ~p ~p", [Host, Opts]),
?CRITICAL_MSG("Starting: ~p ~p", [Host, Opts]),
您必须包含“-include("logger.hrl")”。到模块的顶部。这只会将宏定义告知 ejabberd。
您还可以使用“ejabberdctl set_loglevel 4”命令在 运行 时间内更改调试级别。
日志级别是:
0: 没有 ejabberd 日志
1:严重
2: 错误
3: 警告
4: 信息
5: 调试