Как иногда ~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])