2017-11-27 11 views

답변

6

이것은 주로 http://erlang.org/doc/man/error_logger.html에 설명되어 있지만 기본적으로 error_logger 모듈은 gen_event 서버 또는 error_logger라고도하는 "이벤트 관리자"를 시작하고 상호 작용하기위한 API를 구현합니다. 이 프로세스는 이벤트를 수신하여 등록 된 핸들러로 전달합니다. API 모듈에는 실제 이벤트 메시지를 서버가 예상하는 올바른 형식으로 보내는 error_msg (...)와 같은 기능이 있습니다.

- error_logger 모듈은 gen_event 콜백 함수도 구현하여 서버의 핸들러로 등록 할 수 있습니다. 이 코드는 별도의 모듈에 배치 될 수 있지만 (아마도 있어야 함) 이점은 오류 로거가 시작될 때 콜백 코드가 이미로드되어 있다는 것입니다.

오류 로거는 Erlang 부팅 스크립트에 의해 시작되며 커널 응용 프로그램을 포함한 모든 응용 프로그램이 시작됩니다. 그 당시에는 시스템의 기능에 대해 알려진 것이 거의 없지만 기본적인 오류 로깅은 여전히 ​​작동해야합니다. error_logger 모듈의 콜백은이 초기 단계의 모든 오류를 Beam 런타임 프로세스의 표준 출력으로 바로 출력합니다.이 오류는 콘솔이나/dev/null 일 수 있습니다. 또한 나중에 고정 된 수의 메시지를 더 나은 처리기로 전달할 수 있도록 버퍼링합니다.

커널 응용 프로그램이 시작되면 커널 응용 프로그램 환경 설정을 읽고 error_logger_tty_h 또는 error_logger_file_h와 같이 시스템에서 실제로 원하는 종류로 error_logger 처리기를 바꿉니다. 또한 이전 로거에서 버퍼링 된 메시지를 가져 오므로이를 처리 할 수 ​​있습니다.

error_logger 모듈은 여전히 ​​이벤트 관리자의 핸들러로 등록되므로 이야기의 끝 부분은 아닙니다. 이 새로운 역할에서는 인쇄 나 버퍼링을하지 않지만 이벤트를 전달한 프로세스의 그룹 리더 프로세스에 해당하는 얼랑 노드로 이벤트를 전달할 책임이 있습니다. 이렇게하면 오류 로거 이벤트가 항상 "집"방식으로 그룹 리더 프로세스의 노드에 기록됩니다.