Лагерная строка журнала обрезана

Я работаю над модификацией некоторого кода ejabberd, и я сталкиваюсь с ошибкой, напечатанной через lager:

2014-04-25 18:29:39.380 [error] emulator Error in process <0.652.0> on node 'ejabberd@localhost' with exit value: {function_clause,[{lists,zip,[[transport,connection,pid,method,version,peer,host,host_info,port,path,path_info,qs,qs_vals,bindings,headers,p_headers,cookies,meta,body_state,multipart,buffer,resp_compress...

К сожалению, строка обрезана, и я не вижу остальной части трассировки стека. Как просмотреть все сообщение об ошибке?

2 ответа

Я думаю, что размер ствола лагера можно отрегулировать следующим образом: lager.erl исходный файл

%% @doc Manually log a message into lager without using the parse transform.
-spec log(log_level(), pid() | atom() | [tuple(),...], list()) -> ok | {error, lager_not_running}.
log(Level, Pid, Message) when is_pid(Pid); is_atom(Pid) ->
    dispatch_log(Level, [{pid,Pid}], Message, [], ?DEFAULT_TRUNCATION);
log(Level, Metadata, Message) when is_list(Metadata) ->
    dispatch_log(Level, Metadata, Message, [], ?DEFAULT_TRUNCATION).

%% @doc Manually log a message into lager without using the parse transform.
-spec log(log_level(), pid() | atom() | [tuple(),...], string(), list()) -> ok | {error, lager_not_running}.
log(Level, Pid, Format, Args) when is_pid(Pid); is_atom(Pid) ->
    dispatch_log(Level, [{pid,Pid}], Format, Args, ?DEFAULT_TRUNCATION);
log(Level, Metadata, Format, Args) when is_list(Metadata) ->
    dispatch_log(Level, Metadata, Format, Args, ?DEFAULT_TRUNCATION).

?DEFAULT_TRUNCATION определяется в файле lager.hrl.

-define(DEFAULT_TRUNCATION, 4096).
-define(DEFAULT_TRACER, lager_default_tracer).

Я думаю, что вы могли бы увеличить вышеупомянутое значение по умолчанию и затем скомпилировать лагер снова для использования.

Но ваш журнал не такой длинный, как 4096, и журнал не от лагера, а от перенаправления лагера (error_logger). Следующий вопрос может быть связан с вашей проблемой: усеченное сообщение об ошибке в erlang

Есть две возможности. Первый - добавить следующую опцию компиляции в опцию erlc в rebar/erlang.mk:

+'{lager_truncation_size, 20480}'

Это позволит установить максимально допустимый размер общего журнала в 20 КБ для всех модулей, скомпилированных erlc, вероятно, всех из них в проекте, если вы не собираетесь создавать файл make. Причина ограничения усечения заключается в том, чтобы не перегружать процессы лагера, поэтому это может быть опасно для всего проекта.

Обратите внимание, что добавление этого для каждого модуля с использованием -compile атрибут не работает, смотрите эту проблему.

Другой способ - позвонить lager:dispatch_log и обойти преобразование

lager:dispatch_log(info, [{pid, self()}], "hello ~s|", [lists:duplicate(1000, "hello")], 20480).

Оба метода требуют внесения изменений в код или процесс сборки.

Другие вопросы по тегам