首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >erlang lager轨迹配置

erlang lager轨迹配置
EN

Stack Overflow用户
提问于 2014-04-19 17:22:48
回答 1查看 2.9K关注 0票数 1

我对大型追踪功能有问题。

我需要的是:

5个档案:

  1. crash.log -这是默认的lager文件,让它成为
  2. error.log -这里将出现所有错误及以上错误
  3. info.log -这里将提供所有的信息、通知和警告消息。 4&5. transmitted.logreceived.log --以下是使用lager:info([{type, tx}]lager:error([{type, rx}]和跟踪特性具有不同严重性的特殊消息。 过滤到这些文件的消息不应在info.log和error.log中重复

到目前为止我所取得的成就:

消息成功地重定向到发送和接收到的日志文件,error.log按其应有的方式工作。

问题:

  1. 不知道如何使info.log只接受通知、信息和警告,而不接受调试级别(使用{level, '<error'}也将包括调试级别)
  2. 重定向到transmitted.log和received.log文件的消息也会出现在info.log和error.log文件中。f.e.如果我使用lager:error([{type, tx}], "ERROR"),它会出现3次:在info.log、error.log和transmitted.log中,而应该只在transmitted.log中出现

我的大配置:

代码语言:javascript
复制
{lager, [
  {crash_log, 'logs/crash.log'}
  ,{handlers, [
    {lager_file_backend, [{file, "logs/info.log"}, {level, info}]}
    ,{lager_file_backend, [{file, "logs/error.log"}, {level, error}]}
    ,{lager_file_backend, [{file, "logs/received.log"}, {level, none}, {date, "$D0"},
      {formatter_config, [date, " ", time," [",severity,"] ", pid, " ", message, "\n"]}]}
    ,{lager_file_backend, [{file, "logs/transmitted.log"}, {level, none}, {date, "$D0"},
      {formatter_config, [date, " ", time," [",severity,"] ", pid, " ", message, "\n"]}]}
  ]}
  ,{traces, [
    {{lager_file_backend, "logs/received.log"}, [{type, rx}], info}
   ,{{lager_file_backend, "logs/transmitted.log"}, [{type, tx}], info}
  ]}
]}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-19 23:47:18

对于问题1,请查看大型程序的源文件lager_util.erl

代码语言:javascript
复制
levels() ->
    [debug, info, notice, warning, error, critical, alert, emergency, none].

level_to_num(debug)     -> ?DEBUG;
level_to_num(info)      -> ?INFO;
level_to_num(notice)    -> ?NOTICE;
level_to_num(warning)   -> ?WARNING;
level_to_num(error)     -> ?ERROR;
level_to_num(critical)  -> ?CRITICAL;
level_to_num(alert)     -> ?ALERT;
level_to_num(emergency) -> ?EMERGENCY;
level_to_num(none)      -> ?LOG_NONE.

调试是最低级别,如果只需要记录上面的通知,只需将其设置为{level,注意}。

对于第二个问题,有两种方法。1.我认为你可以通过增加一个新的拉格后端来解决这个问题。在lager的lager_file_backend.erl源代码中

代码语言:javascript
复制
handle_event({log, Message},
    #state{name=Name, level=L,formatter=Formatter,formatter_config=FormatConfig} = State) ->
    case lager_util:is_loggable(Message,L,{lager_file_backend, Name}) of
        true ->
            {ok,write(State, lager_msg:timestamp(Message), lager_msg:severity_as_int(Message), Formatter:format(Message,FormatConfig)) };
        false ->
            {ok, State}
    end;

您可以基于lager_file_backend创建一个新的后端,并在这里添加您的逻辑以解决问题。

方法2.不修改lager的源代码,使用unix的bash和grep工具来解决这个问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23173144

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档