2010-12-29 21 views
5

Tôi đang sử dụng tuyệt vời AnyEvent để tạo máy chủ TCP không đồng bộ (cụ thể là máy chủ MUD).Mô-đun ghi nhật ký nào để sử dụng trong AnyEvent của Perl?

Để giữ cho mọi thứ chạy trơn tru và với càng ít chặn/miếng đồng bộ của mã có thể, tôi đã thay thế một số module Tôi đã sử dụng với đối tác không đồng bộ của họ, ví dụ AnyEvent::MemcachedAnyEvent::Gearman. Điều này cho phép chương trình chính được khá nhanh chóng, đó là mong muốn. Tôi đã mã hóa xung quanh sự cần thiết cho một số các cuộc gọi được đồng bộ.

Một vấn đề tôi hiện có và trọng tâm của câu hỏi này là ghi nhật ký.

Trước khi chuyển sang AnyEvent cho chương trình máy chủ này, tôi đã sử dụng Log::Log4perl vì nó cho phép tôi tinh chỉnh mô-đun hoặc chương trình con nào được ghi lại, ở cấp độ nào và đầu ra nhật ký (màn hình, tệp, v.v ...).

Vấn đề ở đây là hành động Log4perl (cảnh báo, thông tin, v.v.) hiện đang được thực hiện đồng bộ nhưng tôi không yêu cầu điều đó miễn là các dòng ghi cuối cùng kết thúc trên màn hình/tệp (và theo đúng thứ tự).

Nhật ký :: Log4perl vẫn là lựa chọn đúng khi sử dụng trình xử lý sự kiện không đồng bộ như AnyEvent hay tôi nên xem xét một mô-đun khác? Nếu vậy, được khuyến nghị?

Trả lời

2

AnyEvent :: Nhật ký, đi kèm với AnyEvent, sử dụng AnyEvent :: IO, nối thêm vào tệp không đồng bộ khi IO :: AIO khả dụng (và đồng bộ khi không).

2

Bạn đang cố gắng tránh điều gì? Nếu đó là tệp IO đồng bộ (ghi vào tệp nhật ký/stdout vv) thì vấn đề của bạn có thể được giải quyết với một bộ đệm không đồng bộ và/hoặc bộ đệm thay vì sử dụng tất cả việc sử dụng Log4perl trong mã của bạn.

Log::Log4perl::Appender::Buffer có vẻ như đó có thể là một khởi đầu tốt, nhưng một ứng dụng hoàn toàn không đồng bộ dường như không tồn tại nữa.

+0

Cảm ơn bạn đã làm rõ rằng một ứng dụng không đồng bộ dường như không tồn tại – mfontani

Các vấn đề liên quan