2010-12-29 11 views
5

Sto utilizzando il meraviglioso AnyEvent per la creazione di un server TCP asincrono (in particolare, un server MUD).Quale modulo di registrazione utilizzare in AnyEvent di Perl?

Per garantire il corretto funzionamento di tutto e con il minor numero possibile di codici di blocco/sincrono, ho sostituito alcuni moduli che stavo usando con la loro controparte asincrona, ad esempio AnyEvent::Memcached e AnyEvent::Gearman. Ciò consente al programma principale di essere abbastanza veloce, il che è desiderabile. Ho codificato la necessità che alcune di queste chiamate siano sincrone.

Un problema che attualmente ho e il focus di questa domanda è il logging.

Prima di passare a AnyEvent per questo programma server, stavo usando Log::Log4perl in quanto mi permette di mettere a punto quali moduli o subroutine devono essere registrati, a quale livello ea quale output di registro (schermo, file, ecc.).

Il problema qui è che le azioni di Log4perl (warn, info, ecc.) Sono attualmente eseguite in modo sincrono ma non ho alcun requisito per questo finché le righe di log finiscono per finire sullo schermo/file (e nell'ordine corretto).

Log: Log4perl è ancora la scelta giusta quando si utilizza un gestore di eventi asincroni come AnyEvent o devo guardare un modulo diverso? Se sì, quale è raccomandato?

risposta

2

AnyEvent :: Log, fornito con AnyEvent, utilizza AnyEvent :: IO, che si aggiunge ai file in modo asincrono quando IO :: AIO è disponibile (e in modo sincrono quando non lo è).

2

Che cosa stai cercando di evitare? Se si tratta di file I/O sincrono (scrittura di file di log/stdout ecc.) Il problema verrebbe probabilmente risolto con un appender o un appender asincrono e/o buffering piuttosto che sostituire l'uso di Log4perl nel proprio codice.

Log::Log4perl::Appender::Buffer sembra che potrebbe essere un buon inizio, ma un appender completamente asincrono non sembra più esistere.

+0

Grazie per aver chiarito che un appender asincrono non sembra esistere – mfontani

Problemi correlati