Pregunta

¿Hay alguna manera de escribir eventos de registro log4j en un archivo de registro que también estén escribiendo otras aplicaciones? Las otras aplicaciones podrían ser aplicaciones que no sean Java. ¿Cuáles son los inconvenientes? ¿Problemas de bloqueo? Formateo?

¿Fue útil?

Solución

Log4j tiene un SocketAppender, que enviará eventos a un servicio, que puede implementar usted mismo o usar la implementación simple incluida con Log4j.

También es compatible con syslogd y el registro de eventos de Windows, lo que puede ser útil para intentar unificar la salida de su registro con eventos de aplicaciones que no son Java.

Si el rendimiento es un problema, desea un solo servicio que escriba el archivo de registro, en lugar de tratar de coordinar una estrategia de bloqueo consistente entre diversas aplicaciones de registro.

Otros consejos

Su mejor opción podría ser dejar que cada aplicación inicie sesión por separado, y luego poner un trabajo programado para 'comprimir' los archivos en función del tiempo. Si necesita un acceso realmente actualizado al registro completo, puede ejecutarlo cada hora.

Tengo experiencia con los siguientes dos enfoques:

  1. Utilice la base de datos para iniciar sesión en lugar de un archivo de texto sin formato; puede ser prohibitivo debido a problemas de rendimiento, por otro lado, es muy fácil analizar registros, crear informes. La base de datos se encarga de todos los problemas de concurrencia.
  2. El otro enfoque implica el uso del servidor JBoss, que puede usarse para leer información de registro de otras fuentes. JBoss puede ejecutarse en la configuración mínima y gracias a eso es realmente ligero (2 segundos de tiempo de inicio). Los detalles se pueden encontrar aquí http://docs.jboss.org/process -guide / es / html / logging.html (Iniciar sesión en un servidor separado). Log4J se encarga de todos los problemas de bloqueo / concurrencia.

Si no está planeando usar JBoss, puede usar el segundo enfoque como base de su propia solución de registro.

No creo que los apéndices log4j predeterminados bloqueen o sincronicen ningún archivo. Sin dicho bloqueo, es probable que pierda mensajes de registro o los reciba maltratados.

No estoy seguro de lo fácil que es hacer el bloqueo de archivos en Java, pero para que esto funcione directamente, creo que debería subclasificar el Appender apropiado y anular el método de registro, envolviéndolo con un código de sincronización que bloquea y Desbloquea el archivo. Esto podría tener implicaciones de rendimiento, dependiendo de la carga de su sistema.

Log4perl tiene un Appender de sincronización, Log :: Log4perl :: Appender :: Synchronized, que envuelve un Appender y logra esto, y también parece proporcionar un indicador en su Log :: Log4perl :: Appender :: Archivo que evita el intercalado líneas. Puede mirar lo que hacen para ver si podría ser replicable en Java.

Log4j es lo suficientemente flexible como para que pueda crear entradas de registro en un formato que sea compatible con los registros que ya están en el archivo. Simplemente busque en los apéndices cómo formatear campos de datos específicos.

Su principal preocupación será el bloqueo, probablemente por otras aplicaciones. Asegúrese de que todas las aplicaciones no tengan un bloqueo exclusivo en el archivo y que debería estar bien.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top