我对大型追踪功能有问题。
我需要的是:
5个档案:
lager:info([{type, tx}]或lager:error([{type, rx}]和跟踪特性具有不同严重性的特殊消息。
过滤到这些文件的消息不应在info.log和error.log中重复到目前为止我所取得的成就:
消息成功地重定向到发送和接收到的日志文件,error.log按其应有的方式工作。
问题:
{level, '<error'}也将包括调试级别)lager:error([{type, tx}], "ERROR"),它会出现3次:在info.log、error.log和transmitted.log中,而应该只在transmitted.log中出现我的大配置:
{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}
]}
]}发布于 2014-04-19 23:47:18
对于问题1,请查看大型程序的源文件lager_util.erl
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源代码中
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工具来解决这个问题。
https://stackoverflow.com/questions/23173144
复制相似问题