2008-11-12 8 views

Respuesta

9

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

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

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

1

Lo mejor que puede hacer es dejar que cada aplicación se registre por separado, luego coloque un trabajo programado para 'comprimir' los archivos juntos en función del tiempo. Si necesita acceso realmente actualizado al registro completo, puede ejecutarlo cada hora.

-1

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. Solo mire en los apéndices cómo formatear campos de datos específicos.

Su principal preocupación será con el bloqueo, muy probablemente por otras aplicaciones. Asegúrese de que todas las aplicaciones no tengan un bloqueo exclusivo en el archivo y que esté bien.

1

que tienen una experiencia con los dos enfoques siguientes:

  1. uso de bases de datos para iniciar la sesión en lugar de archivo de texto plano - que puede ser prohibitivo debido a problemas de rendimiento, por el contrario, es muy fácil de analizar los registros , crea informes. La base de datos se ocupa de todos los problemas de simultaneidad.
  2. El otro enfoque implica el uso del servidor JBoss, que se puede usar para leer información de registro de otras fuentes. JBoss se puede ejecutar en la configuración mínima y gracias a eso es realmente liviano (2 segundos de tiempo de inicio). Los detalles se pueden encontrar aquí http://docs.jboss.org/process-guide/en/html/logging.html (Logging to a Seperate Server). Log4J se ocupa de todos los problemas de bloqueo/concurrencia.

Si no tiene previsto utilizar JBoss, puede utilizar el segundo enfoque como base de su propia solución de registro.

0

No creo que los apiladores log4j predeterminados realicen ningún bloqueo o sincronización de archivos. Sin dicho bloqueo, es probable que pierda los mensajes de registro o los reciba destruidos.

No estoy seguro de lo fácil que es hacer el bloqueo de archivos en Java, pero para que esto funcione directamente, creo que necesitaría subclase el Appender apropiado y anular el método de registro, envolviéndolo con un código de sincronización que bloquee 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 ajusta un Appender y lo logra, y también parece proporcionar un indicador en su Log :: Log4perl :: Appender :: File que previene líneas intercaladas. Puede ver lo que hacen para ver si podría ser replicable en Java.

Cuestiones relacionadas