log4erl输出error_logger

一:写在之前

接手的代码竟然不能直接输出异常,抓狂这个在调试上面不能忍啊。

项目用的log4erl,快上线了,也不能大刀阔斧的修改为lager,就研究了下如何让log4erl输出 error_logger


二:实现

首先要明白error_logger 是怎么输出出来的

erlang 启动sasl会启动一个叫做error_logger的 gen_event ,这个event 会分发各种异常,我们要做的就是捕获异常输出到文件里


log4erl 本身提供了一个文件来捕获error_logger 的消息,默认不打开,

error_logger_log4erl_h:add_handler/0

调用这个函数先注册handler,可以调用 gen_event:which_handler(error_logger)来查看是否添加上去


本来以为这样就成功了,但是碰到异常的时候log4erl一直崩溃,查看到原因

log_formatter:format/2 这个函数里面调用了 get_token_value

当 获取token为 log时,出了问题

get_token_value(log, Log) ->
    Msg = Log#log.msg,
    Data = Log#log.data,
	case is_atom(Msg) of
		true ->
            io:format("crash report =========== ~n log ~p~n", [Log]),
    		io_lib:format("~n" ++ atom_to_list(Msg) ++ "=====================================~n\~p", [Data]);
		false ->
			io_lib:format(Msg, Data)
	end;
上面是我修改过的,error_log 在get_token_value的时候 获取到的Msg 是一个 atom 自然不能调用 io_lib:format 

检测一下,按照自己希望的格式返回即可
这样日志文件内就有 error_log 的内容了,勉强能用,不过有时间的各位希望还是换lager要方便很多


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值