2015-02-16 1 views
0

Я использую лагер в приложении Erlang, и я иногда имею заявление журнала, как следующее:Как ~ 1024p иногда попадает в мои журналы?

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

где Reason был возвращен из вызова предыдущей функции. Как я понимаю, ~ 1024p должен быть превращен в какой-то причине это, так что, даже если причина пустая строка, я бы ожидать

failed to create reward instance: ""

но иногда я получаю

failed to create reward instance: ~1024p

Я m просто интересно, может ли кто-нибудь объяснить это поведение. Заранее спасибо.

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

Спасибо.

+0

Можете ли вы показать мне определение макроса 'log_error'? –

+0

Извините. Добавлено определение log_error. – streetcornerlurker

ответ

1

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

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