2010-05-21 13 views
8

Tengo un sistema donde un controlador Java central inicia procesos de análisis, que pueden escribirse en C++, Java o Python (principalmente son C++) . Todos estos procesos actualmente se ejecutan en el mismo servidor. ¿Cuáles son usted sugerencias aQué biblioteca de registro usar para sistema de lenguaje cruzado (Java, C++, Python)

  • crear un registro central a la que todos los procesos se pueden escribir en
  • lo que si en el futuro empujo algunos procesos a otro servidor. ¿Cómo puedo admitir el registro distribuido?

Gracias!

Respuesta

1

Apache tiene cross-platform logging libraries, que le permite iniciar sesión desde varios lenguajes de programación con API similares. Desafortunadamente no tienen una API de Python, aunque deberías ser capaz de crear una con log4cpp y Boost.Python.

Un proyecto en el que trabajo utiliza una de estas bibliotecas para iniciar sesión en una base de datos, lo que nos permite "registro distribuido" con un lugar centralizado para los mensajes de registro. Debo admitir que no soy un fan de esto. Otro proyecto en el que trabajo utiliza una de estas bibliotecas para iniciar sesión en el recurso de registro nativo. El Registro de eventos de Windows tiene algunas características para el registro distribuido, pero el syslog de AFAIK no.

Aunque no tengo ninguna experiencia con él, un mejor ajuste puede ser el proyecto Facebook's Scribe. El conjunto de características cumple sus requisitos, incluida una API de Python. Desafortunadamente usa Thrift que no funciona para C++ en Windows (es decir, el compilador Thrift genera código C++ que solo funciona en UNIX). Es posible que pueda evitar este problema utilizando Cygwin, pero no puedo prometer que el enfoque funcione.

+1

syslog admite el registro distribuido. El syslogd clásico admite el reenvío de mensajes a otro host con la sintaxis '@ hostname'. Consulte la sección "Máquina remota" en la página del manual syslog.conf: http://linux.die.net/man/5/syslog.conf –

+0

Escribano se ve muy interesante, lo estoy buscando en este momento. – recipriversexclusion

5

Recomendaría utilizar el registrador nativo de la plataforma que es syslog en Posix y Event Log en Windows.

Para C++, puede utilizar las llamadas nativas en la plataforma.

Sé que Python viene con syscall wrapper en Posix y hay contenedores para registro de eventos en el PyWin32 extension. Supongo que alguien ha creado envoltorios de Java por ahora.

actualización

En cuanto a syslog y varios archivos. syslog admite el concepto de instalaciones: a través de las instalaciones, puede hacer que diferentes registros vayan a diferentes archivos. Desafortunadamente, las instalaciones están predefinidas; mientras que hay 8 genéricos LOG_LOCAL0 hasta LOG_LOCAL7 no puede definir facilidades arbitrarias.

También tenga en cuenta que depende del daemon syslog decidir dónde enrutar los mensajes de registro para cada instalación/nivel. Es posible que deba ajustar su configuración de daemon syslog para que cada instalación se envíe a un archivo diferente.

+0

Gracias por la respuesta.¿Puedes crear registros de syslog por separado en la misma máquina? Tenemos diferentes servicios, cada uno con una cantidad de procesos y queremos mantener los registros separados de manera ideal. – recipriversexclusion

+0

@recipriversexclusion - respuesta actualizada para responder a tu comentario. –

+0

Otra cosa agradable acerca de syslog es que todas las implementaciones razonables ya saben cómo enviar mensajes de registro a través de la red a otra máquina. –

1

Yo usaría Apache log4cxx o Apache log4j. Es eficiente. Tiene jerarquías de Logger para modularizar tus registros. Es tecnología probada desde hace un tiempo. Actualmente, existen componentes para la consola, los archivos, los componentes de GUI, los servidores de socket remoto, los registradores de sucesos de NT y los daemons remotos de Syslog de UNIX. También es posible iniciar sesión de forma asíncrona.

¿Cómo puedo admitir el registro distribuido? Con complementos de servidores de socket remoto, por ejemplo.

Cuestiones relacionadas