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?
Antwort
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.
könnten Sie etwas Code teilen? –
Link zu dem, was ich auf GitHub gemacht habe. Du hast mich dazu gebracht, Open Source zu gehen! =) – Justin
Gibt es ein Logging-Juwel, das keine Threads erzeugt und stattdessen native asynchrone Verarbeitung mit Callbacks verwendet? –
Wenn Sie auf einem System mit Syslog sind, können Sie einen Blick auf EM-Syslog nehmen
- 1. Wie logge ich mich bei phpMyAdmin ein?
- 2. Wie logge ich mich mit Node mit Mean.io Stack ein
- 3. Wie logge ich mich mit Python in eine Webseite ein?
- 4. JSF- ich logge mich ein und logge automatisch, wenn ich durch es navigiere
- 5. Wie logge ich mich in eine Oracle Datenbank ein?
- 6. Wie schreibe ich (große) Dateien mit Ruby Eventmachine
- 7. Wie logge ich mich von einem chrome.identity oauth provider ab
- 8. log4j in grails: Wie logge ich mich in Datei ein?
- 9. Wie logge ich mich ein Google Play verwende Cookie und Python
- 10. Elmah: Wie logge ich Formpostdaten?
- 11. Wie logge ich Wordpress Benutzer ohne Passwort
- 12. Wie logge ich mich in eine Textdatei mit Custom Kurento OpenCV Module
- 13. Android & Facebook: Wie logge ich mich mit Facebook nach buttonClick ein?
- 14. Wie logge ich mich auf einer Seite mit Python für Scrapping-Zwecke ein
- 15. Wie logge ich Socket.io über Winston ein?
- 16. Wie logge ich von Python Luigi
- 17. Google Anmelden API - Wie logge ich jemanden mit PHP aus?
- 18. Github Services/Ruby-Gem "eventmachine" Mac Installation woes
- 19. konnte nicht wegen 'eventmachine 1.0.3'
- 20. Wie melde ich mich korrekt in meinem Ruby-Juwel?
- 21. Wie können EventMachine & Rails integriert werden?
- 22. Irgendein Erfolg mit Sinatra, das mit EventMachine WebSockets zusammenarbeitet?
- 23. Bundle Installation wird nicht aktualisiert eventmachine gem
- 24. Wie authentifiziere ich mich mit Spnego/Kerberos und Apache HttpClient?
- 25. Wie kann ich mich anmelden und first_name mit last_name anzeigen?
- 26. Wie melde ich mich Exen und dlls mit meinem Codesignierungszertifikat
- 27. Ist es möglich, mehrere parallele HTTP-Anfragen mit EventMachine mit Ruby 1.8 zu initiieren
- 28. Wie verbinde ich mich mit cppunit?
- 29. Wie verbinde ich mich mit AWS Elasticsearch?
- 30. Wie logge ich russischen Text oder nicht-Latein?
Haben Sie versucht, die Protokollierung an einen neuen Thread zu delegieren? – AndrewKS
Das ist, was EM :: Defer mir erlauben würde, aber ich suche nach einer Möglichkeit, es zu vermeiden. – Justin