~1024p 有时如何进入我的大型日志?

How does ~1024p get into my lager logs sometimes?

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

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

其中 Reason 是从之前的函数调用中返回的。据我所知,~1024p 应该变成 Reason 是什么,所以即使 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}]). 有关。不幸的是,我对解析转换还不够了解。

谢谢。

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

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