Я использую замечательный AnyEvent для создания асинхронного TCP-сервера (в частности, сервера MUD).
Чтобы все работало гладко и с минимально возможным количеством блокирующих / синхронных фрагментов кода, я заменил некоторые модули, которые я использовал, на их асинхронный аналог, например AnyEvent :: Memcached и AnyEvent :: Gearman . Это позволяет основной программе работать довольно быстро, что желательно. Я кодировал необходимость синхронности некоторых из этих вызовов.
Одна из проблем, с которой я сейчас сталкиваюсь, и цель этого вопроса - ведение журнала.
Прежде чем обратиться к AnyEvent для этой серверной программы, я использовал Log :: Log4perl , поскольку это позволяет мне точно настроить, какие модули или подпрограммы должны регистрироваться, на каком уровне и в какой вывод журнала ( экран, файл и т. д.).
Проблема здесь в том, что действия Log4perl (предупреждение, информация и т. Д.) В настоящее время выполняются синхронно, но я не требую этого, пока строки журнала в конечном итоге оказываются на экране / файле (и в правильном порядке) .
Является ли Log :: Log4perl по-прежнему правильным выбором при использовании асинхронного обработчика событий, такого как AnyEvent, или мне следует взглянуть на другой модуль? Если да, то что рекомендуется?