Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Logging 大对数线截断_Logging_Erlang_Lager - Fatal编程技术网

Logging 大对数线截断

Logging 大对数线截断,logging,erlang,lager,Logging,Erlang,Lager,我正在修改一些ejabberd代码,我遇到了一个通过lager打印的错误: 2014-04-25 18:29:39.380[错误]节点的进程中出现仿真器错误ejabberd@localhost'的退出值:{function_子句,[{lists,zip,[[transport,connection,pid,method,version,peer,host,host_info,port,path,path_info,qs,qs_vals,bindings,headers,p_header,cook

我正在修改一些ejabberd代码,我遇到了一个通过
lager
打印的错误:

2014-04-25 18:29:39.380[错误]节点的进程中出现仿真器错误ejabberd@localhost'的退出值:{function_子句,[{lists,zip,[[transport,connection,pid,method,version,peer,host,host_info,port,path,path_info,qs,qs_vals,bindings,headers,p_header,cookies,meta,body_state,multipart,buffer,resp_compress…


不幸的是,行被截断了,我看不到堆栈跟踪的其余部分。我如何查看整个错误消息?

我认为lager的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).
默认的截断在lager.hrl文件中定义

-define(DEFAULT_TRUNCATION, 4096).
-define(DEFAULT_TRACER, lager_default_tracer).
我认为您可以增加上述默认值,然后再次编译lager以供使用

但是您的日志没有4096长,并且日志不是来自lager,而是来自lager的重定向(错误日志)。以下问题可能与您的问题有关:

有两种可能性。第一种是在rebar/erlang.mk中的erlc选项中添加以下编译选项:

+'{lager_truncation_size, 20480}'
这会将erlc编译的所有模块的总日志的最大允许大小设置为20kb,如果您没有手工制作make文件,则可能是项目中的所有模块。截断限制的原因之一是不会使较大的进程过载,因此在整个项目中执行此操作可能是危险的

请注意,使用
-compile
属性在每个模块的基础上添加此属性不起作用,请参阅

另一种方法是调用
lager:dispatch\u log
youself,并绕过转换:

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

这两种方法都要求您对代码或构建过程进行修改。

这似乎没有帮助。我修复了原始问题,但日志行仍被截断。似乎是Cowboy中的某个原因造成的。由于组织更改,引用的问题现在存在于此()。