Какой модуль журналирования использовать в Perl's AnyEvent? - PullRequest
5 голосов
/ 29 декабря 2010

Я использую замечательный AnyEvent для создания асинхронного TCP-сервера (в частности, сервера MUD).

Чтобы все работало гладко и с минимально возможным количеством блокирующих / синхронных фрагментов кода, я заменил некоторые модули, которые я использовал, на их асинхронный аналог, например AnyEvent :: Memcached и AnyEvent :: Gearman . Это позволяет основной программе работать довольно быстро, что желательно. Я кодировал необходимость синхронности некоторых из этих вызовов.

Одна из проблем, с которой я сейчас сталкиваюсь, и цель этого вопроса - ведение журнала.

Прежде чем обратиться к AnyEvent для этой серверной программы, я использовал Log :: Log4perl , поскольку это позволяет мне точно настроить, какие модули или подпрограммы должны регистрироваться, на каком уровне и в какой вывод журнала ( экран, файл и т. д.).

Проблема здесь в том, что действия Log4perl (предупреждение, информация и т. Д.) В настоящее время выполняются синхронно, но я не требую этого, пока строки журнала в конечном итоге оказываются на экране / файле (и в правильном порядке) .

Является ли Log :: Log4perl по-прежнему правильным выбором при использовании асинхронного обработчика событий, такого как AnyEvent, или мне следует взглянуть на другой модуль? Если да, то что рекомендуется?

Ответы [ 2 ]

2 голосов
/ 29 декабря 2013

AnyEvent :: Log, который поставляется с AnyEvent, использует AnyEvent :: IO, который асинхронно добавляется к файлам, когда IO :: AIO доступен (и синхронно, когда нет).

2 голосов
/ 25 января 2011

Чего вы пытаетесь избежать?Если это синхронный файловый ввод-вывод (запись в лог-файлы / стандартный вывод и т. Д.), То, вероятно, ваша проблема будет решена с помощью асинхронного и / или буферизующего (-ых) аппендера (ов) вместо того, чтобы заменить все использование Log4perl в вашем коде.

Log :: Log4perl :: Appender :: Buffer кажется, что это может быть хорошим началом, но полностью асинхронный appender, похоже, больше не существует.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...