2010-02-22 16 views
6

Estoy buscando conectar una aplicación Java de terceros a nuestra solución de agregación/análisis de registros (probablemente Splunk, aunque aún no hemos finalizado nuestra selección). Parece ser más fácil conectar el agente Splunk a syslog, por lo que estoy buscando una manera de redirigir los registros de la aplicación a un daemon syslog local en el servidor.¿Existe una implementación robusta del controlador java.util.logging de syslog?

La aplicación Java usa java.util.logging, que desafortunadamente no tiene un controlador de syslog de fábrica (creo que log4j sí, sin embargo). ¿Hay alguna biblioteca probada para hacer esto? La carga del registro no es enorme (probablemente 10-20 mensajes por minuto de cada proceso, hasta 6 procesos por host) pero me preocupan la fiabilidad y la durabilidad (por ejemplo, ¿qué sucede cuando el daemon está inactivo? ...).

Cualquier ayuda se agradece ...

Respuesta

8

SLF4J tiene una bridge para pasar java.util.logging eventos a SLF4J (y por tanto a log4j o logback) que se puede utilizar. Tiene un costo de rendimiento (ver el enlace) pero dada su carga, esto no debería ser un gran problema. Entonces podría usar Log4J's SyslogAppender (o mejor su sucesor, logback, que también tiene un SyslogAppender). No tengo ninguna experiencia con este appender (por lo que esto podría requerir algunas pruebas) pero logback definitivamente es una biblioteca confiable y sé que puede configurarse para no imprimir los rastros de pila usando la "nopexception" o "nopex" conversion word (en caso enviar mensajes cuando el daemon está caído generaría alguna excepción). Si combina este appender con otro (por ejemplo, basado en archivos), no se perderá ningún mensaje.

+0

Gracias, pero esto no responde a la pregunta - Estoy buscando conectar una aplicación/existente/Java que utiliza JUL, por lo que las bibliotecas externas no son realmente útiles. –

+0

@Tomer No sé cómo me lo perdí. He actualizado mi respuesta para cubrir el puente. –

+0

+1 para usar SLF4J – Matt

4

Nuestro proyecto también está utilizando el mecanismo java.util.logging, por lo que, después de pasar algún tiempo para encontrar la aplicación lista de Manejador de protocolo syslog, terminé leyendo RFC 3164 y la creación de mi propia aplicación http://code.google.com/p/agafua-syslog/

Nosotros usándolo en producción, ambos con transportes UDP y TCP. En nuestro caso, el flujo de mensajes de registro es de aproximadamente 1-2 msg por segundo, así que supongo que probablemente sea aplicable a sus necesidades.

+0

También hemos decidido usar Agafua-Syslog necesitábamos hacer algunos mods y el código original no es extensible, así que terminamos copiando su código en nuestro repositorio local de forma manual y construyendo nuestro propio JAR en lugar de usarlo directamente. Él no parece estar manteniéndolo, así que no es un problema demasiado grande, supongo. Echamos un vistazo a tu tenedor, pero parecía mucho más complicado de lo que necesitábamos, así que simplemente tomamos el camino más fácil por el medio. – Bane

+0

Esencialmente, lo que tenemos es un grupo de servidores Glassfish con aproximadamente 6 dominios en cada uno y el uso de la función syslog de GF era simplemente registrar los eventos como "hostx", cuando lo que realmente necesitábamos era "hostx-domain". Así que simplemente agregamos una propiedad ('host') al archivo logging.properties de cada dominio y luego agregamos esa propiedad en la lógica de registro del manejador de registros. – Bane

+0

Y luego conectamos [Graylog] (https://www.graylog.org/) para habilitar la visualización en el navegador, filtrar por eventos, etc. – Bane

Cuestiones relacionadas