Я пишу приложение, используя Ruby и библиотеку Eventmachine. Мне очень нравится идея неблокирующего ввода-вывода и систем, управляемых событиями, проблема, с которой я сталкиваюсь, - это ведение журнала. Я использую стандартную библиотеку регистратора Ruby. Дело не в том, что ведение журнала занимает вечность, но кажется, что это не должно блокировать, и оно блокируется. Есть ли где-нибудь библиотека, которая расширяет стандартную реализацию регистратора Ruby, чтобы она была неблокирующей, или я должен просто вызывать EM::defer для моих вызовов журналирования? Есть ли способ заставить eventmachine сделать это за меня?
Как войти с помощью Ruby и eventmachine?
comment
Вы пробовали делегировать ведение журнала в новый поток?
- person AndrewKS   schedule 12.11.2010
comment
Это то, что EM::defer позволит мне сделать, но я ищу способ избежать этого.
- person Justin   schedule 13.11.2010
Ответы (2)
В итоге я обернул регистратор в одноэлементный класс, который запускал поток и имел очередь FIFO. Ведение журнала сбрасывало информацию журнала в очередь, а поток просто зацикливался, извлекая материал из очереди и используя настоящий регистратор для его регистрации. На самом деле это не шаблон реактора, но он также не сожрет мой пул потоков EM.
С этим синглтоном у вас может быть только один регистратор, но вот что я сделал на github.
person
Justin
schedule
18.11.2010
Ссылка на то, что я выложил на github. Вы заставили меня пойти с открытым исходным кодом! знак равно
- person Justin; 23.06.2011
Есть ли гем ведения журнала, который не порождает потоки, а вместо этого использует собственную асинхронную обработку с обратными вызовами?
- person Wolfram Arnold; 08.07.2013
Если вы работаете в системе с системным журналом, вы можете взглянуть на EM-Syslog.
person
dj2
schedule
14.11.2010