Как иногда ~1024p попадает в мои журналы лагера?

Я использую лагер в приложении erlang, и иногда у меня появляются лог-операторы, подобные следующему:

?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) в конце. Я не вижу функции error в лагере Я предполагаю, что это должно быть связано с -compile([{parse_transform, lager_transform}])., К сожалению, я пока не знаю достаточно о преобразованиях разбора.

Благодарю.

1 ответ

Решение

Аргументом для вашего макроса всегда должен быть список, по одному для каждого спецификатора форматирования в строке формата, поскольку это требуется для lager Функции ваших макросов:

?log_error("failed to create reward instance: ~1024p", [Reason])
Другие вопросы по тегам