一、SASL
SASL全称System Architecture Support Libraries,提供如下几个服务:
alarm_handler
overload
rb
release_handler
systools
SASL带有error_logger的事件处理句柄用于格式化SASL错误和crash报告,这些句柄如下:
sasl_report_tty_h sasl_report_file_h error_logger_mf_h
细节参考OTP文档可知。
SASL的默认event handler会将crash报告、supervisor和进程报告输出到控制台,如果你希望看到这些信息,那么在erlang启动时需要加上指定的参数以启动sasl。
为了方便日志的查看,通常sasl和其他日志是分开输出的,可以在启动erl时使用如下命令行参数:
-sasl sasl_error_logger {file,"/data/ log/sasl.log"}
二、ejabberd的日志系统。
它包含两个部分:
dynamic_compile.erl 动态编译基础模块
ejabberd_logger_h.erl 这是个gen_event behavior模块,可以定制我们写日志的行为
ejabberd_loglevel.h 这个是ejabberd日志系统的精华,可以在运行时动态调节日志的输出级别。
用法很简单:
error_logger:add_report_handler(ejabberd_logger_h, LogPath),
ejabberd_loglevel:set(4) //级别4是info日志
原理很简单,利用code模块的load_binary来实现动态代码替换,但是确实非常强大,可以在需要的时候打开某些特定级别的日志,在系统负载高的时候或者不需要的时候关闭它。
三、
log4erl
四、
lager
五、
mslog:仅供参考,https://github.com/qingliangcn/mslog.