Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Ruby和eventmachine登录?_Ruby_Logging_Eventmachine - Fatal编程技术网

如何使用Ruby和eventmachine登录?

如何使用Ruby和eventmachine登录?,ruby,logging,eventmachine,Ruby,Logging,Eventmachine,我正在使用Ruby和Eventmachine库编写一个应用程序。我非常喜欢非阻塞I/O和事件驱动系统的想法,我遇到的问题是日志记录。我正在使用Ruby的标准记录器库。这并不是说日志记录要花很长时间,但它似乎不应该被阻止,而且确实如此。有没有一个库可以扩展Ruby的标准记录器实现为非阻塞的,或者我应该调用EM::defer来进行日志调用?有什么方法可以让eventmachine为我做这件事吗?如果您使用的是Syslog系统,您可以查看一下我最终将记录器包装在一个单例类中,该类启动了一个线程并具有一

我正在使用Ruby和Eventmachine库编写一个应用程序。我非常喜欢非阻塞I/O和事件驱动系统的想法,我遇到的问题是日志记录。我正在使用Ruby的标准记录器库。这并不是说日志记录要花很长时间,但它似乎不应该被阻止,而且确实如此。有没有一个库可以扩展Ruby的标准记录器实现为非阻塞的,或者我应该调用EM::defer来进行日志调用?有什么方法可以让eventmachine为我做这件事吗?

如果您使用的是Syslog系统,您可以查看一下

我最终将记录器包装在一个单例类中,该类启动了一个线程并具有一个FIFO队列。日志记录会将日志信息转储到队列中,线程只是循环,从队列中取出内容并使用真正的日志记录程序来记录。不是真正的反应器模式,但它也不会占用我的EM线程池


使用此单例,您只能有一个日志记录程序,但以下是我所做的。

您是否尝试将日志记录委派给一个新线程?这是EM::defer允许我做的,但我正在寻找一种方法来避免它。链接到我在github上所做的。你让我去开源了!=)是否有一个日志gem不生成线程,而是使用本机异步处理和回调?