2010-12-29 12 views
5

Estoy usando el maravilloso AnyEvent para crear un servidor TCP asíncrono (específicamente, un servidor MUD).¿Qué módulo de registro usar bajo AnyEvent de Perl?

Para mantener todo funcionando sin problemas y con la menor cantidad posible de código de bloqueo/síncrono, he sustituido algunos módulos que estaba utilizando con su homólogo asíncrono, por ejemplo AnyEvent::Memcached y AnyEvent::Gearman. Esto permite que el programa principal sea bastante rápido, lo cual es deseable. He codificado la necesidad de que algunas de estas llamadas sean sincrónicas.

Un problema que tengo actualmente, y el foco de esta pregunta, es el registro.

Antes de pasar a AnyEvent para este programa de servidor, estaba usando Log::Log4perl ya que me permite ajustar qué módulos o subrutinas se deben registrar, a qué nivel y a qué salida de registro (pantalla, archivo, etc.).

El problema aquí es que las acciones de Log4perl (advertir, información, etc.) se realizan actualmente sincrónicamente, pero no es necesario mientras las líneas de registro finalmente terminen en la pantalla/archivo (y en el orden correcto)

¿Sigue siendo Log :: Log4perl la elección correcta cuando se utiliza un controlador de eventos asincrónico como AnyEvent, o debería buscar en un módulo diferente? Si es así, ¿cuál es el recomendado?

Respuesta

2

AnyEvent :: Log, que viene con AnyEvent, utiliza AnyEvent :: IO, que se agrega a los archivos de forma asincrónica cuando IO :: AIO está disponible (y de forma síncrona cuando no).

2

¿Qué estás tratando de evitar? Si se trata de un archivo síncrono IO (escribir en archivos de registro/stdout, etc.), entonces su problema probablemente se resuelva con un apéndice o un intermediario asincrónico y/o de almacenamiento en memoria intermedia en lugar de reemplazar todo el uso de Log4perl en su código.

Log::Log4perl::Appender::Buffer parece que podría ser un buen comienzo, pero parece que ya no existe un apilador completamente asíncrono.

+0

Gracias por aclarar que un appender asincrónico no parece existir – mfontani

Cuestiones relacionadas