2014-04-26 15 views
5

sto lavorando sulla modifica del codice ejabberd, e sarò di nuovo imbattuto in un errore di stampa tramite lager:Lager linea di log troncato

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

Purtroppo la linea è troncata e non riesco a vedere il resto della traccia dello stack. Come visualizzo l'intero messaggio di errore?

risposta

4

Penso dimensioni trunc del lager può essere regolata come segue: Nel file lager.erl fonte

%% @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). 

Il ?DEFAULT_TRUNCATION è definito nel file lager.hrl.

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

Penso che si potrebbe aumentare il valore predefinito sopra e quindi compilare di nuovo il lager per l'uso.

Ma il registro non è lungo 4096 e il registro non viene da lager, ma dal reindirizzamento di lager (error_logger). La seguente domanda potrebbe essere correlata al tuo problema: Truncated error report in erlang

+0

Grazie, proverò le informazioni di registrazione degli errori lunedì. – kjw0188

+0

Non sembrava aiutare. Ho risolto il problema originale, ma la linea di registro era ancora troncata. Sembra che qualcosa in Cowboy lo stia causando. – kjw0188

2

Ci sono due possibilità. Il primo è quello di aggiungere la seguente opzione di compilazione alle opzioni erlc in tondo per cemento armato/erlang.mk:

+'{lager_truncation_size, 20480}' 

questo imposterà la dimensione massima consentita del registro totale a 20kb per tutti i moduli che vengono compilati dai erlc, probabilmente tutti nel progetto se non si sta consegnando un file make. Il motivo per cui il limite del troncato è di non sovraccaricare i processi di lager in modo che farlo in tutto l'intero progetto possa essere pericoloso.

Nota che l'aggiunta di questo su una base per modulo utilizzando l'attributo -compilenon funziona, vedi this issue.

L'altro modo è quello di chiamare lager:dispatch_log portarvi direttamente e bypassare la trasformazione:

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

Entrambi i metodi richiedono che si fanno modifiche al codice o processo di compilazione.

+0

Il problema segnalato ora risiede qui (https://github.com/erlang-lager/lager/issues/211#issuecomment-37545795) a causa del cambio di organizzazione. –