2014-04-26 8 views
5

pracuję na modyfikowanie kodu ejabberd, a ja napotykając błędu drukowanej poprzez lager:linia dziennika Lager obcięty

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...

Niestety linia jest obcięty i nie mogę zobaczyć resztę śladu stosu. Jak wyświetlić cały komunikat o błędzie?

Odpowiedz

4

myślę rozmiar trunc lager można regulować w następujący sposób: W pliku lager.erl źródłowego

%% @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 jest zdefiniowana w pliku lager.hrl.

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

Myślę, że można zwiększyć powyższą wartość domyślną, a następnie skompilować ponownie lager do użycia.

Ale twój dziennik nie jest tak długi jak 4096, a dziennik nie pochodzi z lagera, ale z przekierowania lager (error_logger). Z twoim problemem może być powiązane następujące pytanie: Truncated error report in erlang

+0

Dzięki, wypróbuję informacje o dzienniku błędów w poniedziałek. – kjw0188

+0

To nie pomogło. Naprawiłem pierwotny problem, ale linia dziennika była nadal obcinana. Wygląda na to, że coś w Cowboyu powoduje. – kjw0188

2

Istnieją dwie możliwości. Pierwszym jest dodanie następującej opcji kompilacji do erlc opcji zbrojenia/erlang.mk:

+'{lager_truncation_size, 20480}' 

Spowoduje to ustawienie maksymalnej dopuszczalnej wielkości całkowitej dziennika do 20kb dla wszystkich modułów, które zostały opracowane przez erlc, prawdopodobnie wszystkie z nich w projekcie, jeśli nie przekazujesz tworzenia pliku make. Powodem, dla którego ograniczenie jest ograniczone, nie jest przeciążanie procesów lager, więc robienie tego przez cały projekt może być niebezpieczne.

Zauważ, że dodanie tego modułu na jednej podstawie, stosując atrybut -compile nie działa patrz this issue.

Innym sposobem jest wywołanie lager:dispatch_log poczuć, i ominąć transformacji:

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

Obie metody wymagają, aby dokonać zmian w kodzie lub zbudować proces.

+0

Problem z odniesieniami teraz mieszka tutaj (https://github.com/erlang-lager/lager/issues/211#issuecomment-37545795) z powodu zmiany org. –