2014-04-26 94 views
5

我正在修改一些ejabberd代碼,而我整個印刷錯誤來通過lager拉格日誌行截斷

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

不幸的是,線被截斷,我看不到堆棧跟蹤的其餘部分。我如何查看整個錯誤信息?

回答

4

我覺得啤酒的TRUNC大小可以進行如下調整: 在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)。以下問題可能與您的問題有關: Truncated error report in erlang

+0

謝謝,我會在星期一嘗試錯誤記錄器信息。 – kjw0188

+0

它似乎沒有幫助。我解決了原始問題,但日誌行仍被截斷。似乎牛仔中的某些東西正在造成它。 – kjw0188

2

有兩種可能性。首先是以下編譯選項添加到螺紋鋼/ erlang.mk的erlc選項:

+'{lager_truncation_size, 20480}' 

這將設置總日誌所允許的最大大小20KB用於由erlc編譯所有模塊,可能如果你沒有手工編寫make文件,他們都在項目中。這是截斷限制的一個原因是不要超載較大的進程,所以在整個項目中這樣做可能是危險的。

注意,在使用-compile屬性每個模塊的基礎上添加這不起作用,看到this issue

另一種方法是調用lager:dispatch_log youself,並繞過變換:

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

這兩種方法都需要您做出修改代碼或建造過程。

+0

由於組織結構的變化,引用的問題現在位於此處(https://github.com/erlang-lager/lager/issues/211#issuecomment-37545795)。 –