2010-11-11 9 views
12

En mi lugar de trabajo, escribimos un apéndice log4j personalizado que escribe los mensajes de registro en la base de datos (utiliza un hilo dedicado de forma asincrónica, por lo que no se ejecuta ningún rendimiento). Prefiero mucho más que escribir en archivos de registro: un registro basado en una base de datos es mucho más fácil de consultar y analizar.¿Un buen apilador de registro de base de datos para Java?

¿Hay una solución de código abierto que hace esto (para log4j específicamente, o cualquier otro registrador de Java)?

Algunas cosas que nuestra appender tiene, y me gustaría ver en una alternativa:

  • Registros excepciones (! Duh)
  • escrituras base de datos son de un hilo/piscina separada

Nuestro appender admite las siguientes columnas, y me gustaría verlas a todas en la solución que encontremos.

  • LOGID
  • Tiempo
  • mensaje
  • StackTrace
  • proceso de identificación
  • ID del tema
  • nombre de la máquina
  • componente
  • Nivel (debug/info/advertirle /. ..)
  • threadName

Respuesta

0

Usted no necesita una appender personalizado para LOG4J escribir en bases de datos. Puede usar JDBCAppender incluido con la distribución de Apache.

De acuerdo con la documentación de APACHE, esta API podría reemplazarse en el futuro. Pero por ahora, lo usamos y funciona muy bien.

+0

¡Dice en rojo en la documentación que no registra excepciones! – ripper234

+0

@ ripper234: Lo sé. No especificó que necesita registrar excepciones ... :-) –

+3

Vamos, en serio ... – ripper234

2

También hay una clase DBAppender proporcionada por log4j (log4j requiere un conjunto específico de tablas para iniciar sesión con este appender). http://logging.apache.org/log4j/companions/receivers/apidocs/org/apache/log4j/db/DBAppender.html

Hay un no-Apache registrador JDBC actualizada disponible aquí también se puede intentar: http://www.dankomannhaupt.de/projects/index.html

+0

¿Responde a los requisitos (revisados)? – ripper234

+0

Aquí está la fuente del appender: http://svn.apache.org/viewvc/logging/log4j/companions/receivers/trunk/src/main/java/org/apache/log4j/db/DBAppender.java?view = markup – Scott

+0

id de proceso y el nombre de la máquina se pueden pasar como propiedades si anidan la definición de DBAppender en RewriteAppender. RewriteAppender le permite modificar el evento de registro a través de RewritePolicy antes de pasar el evento al appender anidado. Ver: http://logging.apache.org/log4j/companions/receivers/apidocs/org/apache/log4j/rewrite/RewriteAppender.html y http://logging.apache.org/log4j/companions/receivers/apidocs/org/apache/log4j/rewrite/RewritePolicy.html – Scott

1

Sólo por curiosidad, ¿no afectar severamente el funcionamiento de un alojamiento de aplicaciones tales appender? Iniciar sesión directamente en la base de datos relacional es bastante costoso incluso cuando lo hace de forma asincrónica.

+0

Bueno, si activa los mensajes DEBUG, podría afectar el rendimiento. Aún así, lo hacemos por lotes, por lo que el efecto en el rendimiento no es enorme a menos que realmente esté sacando cientos de mensajes de registro por segundo. – ripper234

+0

Sí, eso creía. Sin embargo, tenga en cuenta que los rastros de pila podrían ser grandes. Si su aplicación está dedicada a la administración de registros, las confirmaciones directas a la base de datos están bien, pero si se supone que debe hacer un trabajo real, la molestia con la capa de base de datos no parece ser un enfoque escalable en mi humilde opinión. No creo que haya un appender de código abierto como usted está pidiendo, no visto uno. Hubo algo llamado JDBCAppender una vez, pero no se veía serio. Si observara un producto comercial: observe los logfaces, hace exactamente esto pero en un ámbito más amplio y desacopla la aplicación de la administración de registros por completo. – Dima

+0

Hemos utilizado este enfoque en el código de producción durante los últimos tres años, en un sistema de mediana escala (aproximadamente 20 máquinas). Suponiendo que su nivel de datos es "suficientemente escalable" y no bombea demasiados mensajes de registro (generalmente INFO y superior), creo que las ventajas superan las desventajas. – ripper234

Cuestiones relacionadas