1

我在 erlang 应用程序中使用 lager,偶尔会有如下日志语句:

?log_error("failed to create reward instance: ~1024p", Reason)

其中原因是从先前的函数调用返回的。据我了解,~1024p 应该变成任何原因,所以即使原因是一个空字符串,我也会期望

failed to create reward instance: ""

但有时我得到

failed to create reward instance: ~1024p

我只是想知道是否有人可以解释这种行为。提前致谢。

编辑: ?log_error 的宏定义是:

-define(log_error(Message, Arguments), ?do_log_error(Message, Arguments) ).

-define(do_log_error(Message, Arguments), ?log(error, Message, Arguments)).

-define(log(Level, Message, Arguments), ok = lager:Level(Message, Arguments)).

这意味着?log_debug("...", Reason)调用lager:error("...",Reason)到底。我没有看到errorlager.erl 中的函数。我猜它一定与-compile([{parse_transform, lager_transform}]).. 不幸的是,我对解析转换还不够了解。

谢谢。

4

1 回答 1

2

宏的参数应该始终是一个列表,一个用于格式字符串中的每个格式说明符的列表,因为这是lager宏调用的函数所要求的:

?log_error("failed to create reward instance: ~1024p", [Reason])
于 2015-02-17T00:15:09.393 回答