2010-11-11 4 views
6

Ich schreibe eine Anwendung mit Ruby und der Eventmachine-Bibliothek. Ich mag die Idee von nicht blockierenden E/A- und ereignisgesteuerten Systemen, das Problem, mit dem ich konfrontiert bin, ist die Protokollierung. Ich benutze Rubys Standard-Logger-Bibliothek. Es ist nicht so, dass das Logging ewig dauert, aber es scheint etwas zu sein, das nicht blockieren sollte und es auch tut. Gibt es da draußen irgendwo eine Bibliothek, die die Standard-Logger-Implementierung von Ruby so erweitert, dass sie nicht blockiert? Oder sollte ich einfach EM :: defer für meine Logging-Aufrufe aufrufen? Gibt es einen Weg, wie ich Eventmachine das schon für mich machen kann?Wie logge ich mich mit Ruby und eventmachine?

+0

Haben Sie versucht, die Protokollierung an einen neuen Thread zu delegieren? – AndrewKS

+0

Das ist, was EM :: Defer mir erlauben würde, aber ich suche nach einer Möglichkeit, es zu vermeiden. – Justin

Antwort

3

ich den Logger in einer Singletonklasse Einwickeln endete, die einen Faden und hatte eine FIFO-Warteschlange gestartet. Die Protokollierung würde Log-Informationen in die Warteschlange ablegen und der Thread würde einfach geloopt werden, was Dinge aus der Warteschlange zieht und den echten Logger zum Loggen verwendet. Nicht wirklich Reaktormuster, aber es wird auch nicht meinen EM-Thread-Pool zerkauen.

Mit diesem Singleton können Sie immer nur einen Logger haben, aber hier ist, was ich getan habe auf github.

+0

könnten Sie etwas Code teilen? –

+1

Link zu dem, was ich auf GitHub gemacht habe. Du hast mich dazu gebracht, Open Source zu gehen! =) – Justin

+0

Gibt es ein Logging-Juwel, das keine Threads erzeugt und stattdessen native asynchrone Verarbeitung mit Callbacks verwendet? –

1

Wenn Sie auf einem System mit Syslog sind, können Sie einen Blick auf EM-Syslog nehmen

Verwandte Themen