我在erlang应用程序中使用lager,偶尔会有以下日志语句:
?log_error("failed to create reward instance: ~1024p", Reason)
从上一个函数调用返回Reason。据我所知~1024p应该变成什么原因,所以即使Reason是一个空字符串我也会期待
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)
。我在lager.erl中看不到函数error
。我猜它必须与-compile([{parse_transform, lager_transform}]).
有关。不幸的是,我还不太了解解析变换。
感谢。
答案 0 :(得分:1)
宏的参数应该始终是一个列表,格式字符串中的每个格式说明符都有一个列表,因为这就是宏调用的lager
函数所需要的:
?log_error("failed to create reward instance: ~1024p", [Reason])