2010-12-29 3 views
5

비동기 TCP 서버 (특히 MUD 서버)를 생성하는 데 멋진 AnyEvent을 사용하고 있습니다.Perl의 AnyEvent에서 사용할 로깅 모듈은 무엇입니까?

블로킹/동기 코드를 거의 사용하지 않고 원활하게 실행하기 위해 비동기 모듈과 함께 사용했던 일부 모듈 (예 : AnyEvent::MemcachedAnyEvent::Gearman)을 교체했습니다. 이것은 주 프로그램이 아주 빠르다는 것을 가능하게하는데, 이것은 바람직하다. 필자는 이러한 호출 중 일부가 동기화되어야한다는 필요성을 주위에 코딩했습니다.

현재 내가 가지고있는 한 가지 문제점과이 질문의 초점은 로깅입니다.

이 서버 프로그램에 대한 AnyEvent를 사용하기 전에 어떤 모듈이나 서브 루틴을 어떤 수준에서 로그 출력 (화면, 파일 등)을해야하는지 미세 조정할 수 있으므로 Log::Log4perl을 사용하고있었습니다.

Log4perl 작업 (경고, 정보 등)이 현재 동 기적으로 수행되지만 로그 라인이 결국 화면/파일 (및 올바른 순서)).

AnyEvent와 같은 비동기 이벤트 처리기를 사용할 때 Log :: Log4perl이 올바른 선택인지, 아니면 다른 모듈을 봐야합니까? 그렇다면 어떤 것이 좋습니다?

답변

2

AnyEvent와 함께 제공되는 AnyEvent :: Log는 AnyEvent :: IO를 사용합니다. AnyEvent :: IO는 IO :: AIO를 사용할 수있을 때 비동기 적으로 파일에 추가합니다 (그렇지 않은 경우 동 기적으로).

2

피해야 할 대상은 무엇입니까? 동기 파일 IO (로그 파일/stdout 등)를 작성하는 경우 코드에서 Log4perl의 모든 사용을 대체하는 대신 비동기 및/또는 버퍼링 appender (s)로 문제를 해결할 수 있습니다.

Log::Log4perl::Appender::Buffer 마치 좋은 시작일 것 같지만 완전히 비동기 애플릿이 더 이상 존재하지 않는 것처럼 보입니다.

+0

비동기 애플릿이 존재하지 않는 것을 분명히하기 위해 감사드립니다. – mfontani

관련 문제