2014-04-26 2 views
5

을 절단, 나는 lager를 통해 인쇄 오류를 가로 질러 간다 :맥주 로그 라인은 좀 ejabberd 코드를 수정 일하고 있어요

2014-04-25 18:29:39.380 [error] emulator Error in process <0.652.0> on node '[email protected]' 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...

불행하게도 라인이 잘리고 난을 볼 수 없습니다 나머지 스택 추적. 전체 오류 메시지는 어떻게 볼 수 있습니까? 을 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 파일에 정의되어 있습니다 :

답변

4

나는 다음과 같이 맥주의 TRUNC 크기가 조절 될 수 있다고 생각합니다.

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

위의 기본값을 높이고 라거를 다시 컴파일하여 사용할 수 있다고 생각합니다.

그러나 로그의 길이는 4096이며 로그의 크기는 lager가 아니라 lager의 리디렉션 (error_logger)입니다. 다음 질문은 문제와 관련이있을 수 있습니다. Truncated error report in erlang

+0

감사합니다. 월요일에 오류 로거 정보를 시도해 보겠습니다. – kjw0188

+0

도움이되지 않았다. 원래 문제는 해결했지만 로그 라인은 여전히 ​​잘 렸습니다. 카우보이의 무언가가 그걸 일으키는 것 같아. – kjw0188

2

두 가지 가능성이 있습니다. 첫 번째는 철근/erlang.mk의 erlc 옵션에 다음 컴파일 옵션을 추가하는 것입니다

+'{lager_truncation_size, 20480}' 

이 것이다 아마, erlc에 의해 컴파일 된 모든 모듈에 대한 20킬로바이트에 총 로그의 최대 허용 크기를 설정 당신이 make 파일을 만드는 것을 건네주지 않으면 프로젝트의 모든 것. 잘라내 기 한계는 라거 프로세스에 과부하가 걸리지 않기 때문에 전체 프로젝트에서이 작업을 수행하면 위험 할 수 있습니다. -compile 속성 를 사용하여 모듈별로이 추가가 작동하지 않습니다

참고 this issue를 참조하십시오.

다른 방법은 lager:dispatch_log youself를 호출하는 것입니다, 그리고 우회 변환 :

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

두 가지 방법을 사용하면 코드를 수정할 수 또는 프로세스를 구축해야합니다.

+0

org 변경으로 인해 참조 된 문제는 현재 여기 (https://github.com/erlang-lager/lager/issues/211#issuecomment-37545795)에 있습니다. –

관련 문제