我遇到了大量跟踪功能的问题 我需要的是:
5个文件:
1. crash.log - 这是默认的lager文件,让它为
2. error.log - 这里将是所有错误及以上
3. info.log - 这里将包含所有信息,通知和警告信息
4和5。 transmit.log 和 received.log - 此处将显示使用lager:info([{type, tx}]
或lager:error([{type, rx}]
及跟踪功能的各种严重性的特殊邮件。
过滤到这些文件的邮件不应在info.log和error.log
到目前为止我取得的成就:
消息成功重定向到传输和接收的日志文件,error.log按预期工作。
问题:
1.不知道如何使info.log只接受通知,信息和警告,没有调试级别(使用{level, '<error'}
也将包括调试级别)
2.重定向到transmit.log和received.log文件的消息也出现在info.log和error.log文件中。
F.E.如果我使用lager:error([{type, tx}], "ERROR")
它会出现3次:在info.log,error.log和transmit.log中,它应该只出现在transmit.log中
我的lager配置:
{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}
]}
]}
答案 0 :(得分:1)
对于问题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.
DEBUG是最低级别,如果您只需要记录以上注意,只需设置为{level,notice}。
对于第二个问题,有两种方法。 我认为你可以通过增加一个新的后端来解决它。在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.不要修改更大的源代码,并使用unix的bash和grep工具来解决问题。