我知道 error_logger
和 error_logger_tty_h
都是gen_event error_logger
的可交换处理程序。
从他们的源代码中,我知道error_logger
报告消息结束erlang:display
,而error_logger_tty_h
结束了`io:格式:format(用户,字符串,args)
我感到困惑的是,出于目的,error_logger
和error_logger_tty_h
有什么区别?
这主要是在http://erlang.org/doc/man/error_logger.html中记录的"事件管理器"也名为error_logger。此过程将收到事件并将其传递给注册处理程序。API模块包含诸如error_msg(...)的功能,用于以服务器期望的正确格式发送实际事件消息。
但是, - error_logger模块还实现了gen_event回调功能,以便可以将其注册为服务器的处理程序。该代码可以(也许应该)放在单独的模块中,但优势是在错误记录器启动时已经很清楚回调代码已加载。
错误记录器是由Erlang启动脚本启动的,在启动了任何应用程序(包括内核应用程序)之前。当时,对系统的功能知之甚少,但是基本错误记录仍然需要工作。error_logger模块中的回调实现了原始日志记录,该记录在此早期阶段将任何错误都直接直接划分到梁运行时过程的stdout-这可能只是在控制台或//dev/null上。它还在稍后将其缓冲到固定数量的消息,以后将其传递给更好的处理程序。
当内核应用程序启动时,它将读取内核应用程序环境设置,并将error_logger处理程序交换为您真正想要的系统的内核环境设置,例如error_logger_tty_h或error_logger_file_h。当它接管时,它还将从旧记录器中获取任何缓冲消息,以便可以正确处理它们。
这并不是故事的结尾,因为Error_logger模块仍将注册为活动经理的处理程序。在这个新角色中,它没有进行任何打印或缓冲,但是负责将任何事件转发给与派遣事件的过程中的小组领导过程相对应的ERLANG节点。这样可以确保错误记录器事件总是在其小组领导过程的节点上登录"家"。