在Perl的AnyEvent下使用哪个日志记录模块?

时间:2010-12-29 14:16:22

标签: perl asynchronous

我正在使用精彩的AnyEvent来创建异步TCP服务器(特别是MUD服务器)。

为了保持一切顺利运行并且尽可能少的阻塞/同步代码片段,我已经用异步对应物替换了一些模块,例如AnyEvent::MemcachedAnyEvent::Gearman。这允许主程序非常快速,这是期望的。我已将这些调用的需要编码为同步。

我目前遇到的一个问题是此问题的重点是记录。

在转向此服务器程序的AnyEvent之前,我使用Log::Log4perl因为它允许我微调哪些模块或子程序应该被记录,在哪个级别以及哪个日志输出(屏幕,文件等) )。

这里的问题是Log4perl操作(警告,信息等)当前是同步执行的,但我没有要求,只要日志行最终在屏幕/文件上(并以正确的顺序)

当使用异步事件处理程序(如AnyEvent)时,Log :: Log4perl仍然是正确的选择,还是应该查看其他模块?如果是这样,建议使用哪种?

2 个答案:

答案 0 :(得分:2)

你想避免什么?如果它是同步文件IO(写入日志文件/标准输出等),那么您的问题可能会通过异步和/或缓冲的appender来解决,而不是替换代码中的所有Log4perl。

Log::Log4perl::Appender::Buffer似乎可能是一个好的开始,但是完全异步的appender似乎不再存在。

答案 1 :(得分:2)

随着AnyEvent附带的AnyEvent :: Log使用AnyEvent :: IO,它在IO :: AIO可用时异步附加到文件(并且在没有时同步地附加到文件)。