Log4j - JMS Appender con ActiveMQ
Como todos sabemos (y si no es así lo sabemos ahora), log4j permite usar topics JMS como destino de la información de log, en mi caso estoy acostumbrado a usar ActiveMQ como implementación de JMS por lo que será la que utilice para explicar el proceso, aunque se puede inferir el proceso para otras implementaciones de JMS como JBoss o WebLogic que son de las más utilizadas en la documentación que he visto.
Para utilizar ActiveMQ como destino de tus mensajes de log, necesitas configurar el appender JMS adecuadamente. El código de ejemplo (obtenido de la página oficial de ActiveMQ) para lograr esto es el siguiente:
Es importante tener en cuenta que no se esté logeando información de ActimeMQ con el JMSAppender, porque en otro caso nos arriesgamos a que se envíen mensajes sin que el sistema de colas esté arrancado. Para ello pasamos el log de ActiveMQ a otro appender diferente (en el ejemplo se puede observar como está asociado a la salida stdout).
Para que los recursos de ActiveMQ estén disponibles para Log4j tenemos que configurarlo mediante JNDI en un fichero jndi.properties de nuestra aplicación. Se puede partir del siguiente ejemplo (observar que en la página de ActiveMQ refieren un fichero de propiedades distinto, a mi no me funcionó, por lo que copio el que me funcionó a mi).
Con estos pocos pasos hemos terminado, y ya tenemos configurado Log4j para que redireccione los mensajes de logging a colas JMS usando ActiveMQ como implementación de JMS.
Para utilizar ActiveMQ como destino de tus mensajes de log, necesitas configurar el appender JMS adecuadamente. El código de ejemplo (obtenido de la página oficial de ActiveMQ) para lograr esto es el siguiente:
log4j.rootLogger=INFO, stdout, jms
## Be sure that ActiveMQ messages are not logged to 'jms' appender
log4j.logger.org.apache.activemq=INFO, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %-5p %c - %m%n
## Configure 'jms' appender. You'll also need
## jndi.properties file in order to make it work
log4j.appender.jms=org.apache.log4j.net.JMSAppender
log4j.appender.jms.InitialContextFactoryName=
org.apache.activemq.jndi.ActiveMQInitialContextFactory
log4j.appender.jms.ProviderURL=tcp://localhost:61616
log4j.appender.jms.TopicBindingName=logTopic
log4j.appender.jms.TopicConnectionFactoryBindingName=ConnectionFactory
Es importante tener en cuenta que no se esté logeando información de ActimeMQ con el JMSAppender, porque en otro caso nos arriesgamos a que se envíen mensajes sin que el sistema de colas esté arrancado. Para ello pasamos el log de ActiveMQ a otro appender diferente (en el ejemplo se puede observar como está asociado a la salida stdout).
Para que los recursos de ActiveMQ estén disponibles para Log4j tenemos que configurarlo mediante JNDI en un fichero jndi.properties de nuestra aplicación. Se puede partir del siguiente ejemplo (observar que en la página de ActiveMQ refieren un fichero de propiedades distinto, a mi no me funcionó, por lo que copio el que me funcionó a mi).
java.naming.factory.initial = org.apache.activemq.jndi.ActiveMQInitialContextFactory
# use the following property to configure the default connector
java.naming.provider.url = vm://localhost
# register some queues in JNDI using the form
# queue.[jndiName] = [physicalName]
topic.logTopic = logTopic
Con estos pocos pasos hemos terminado, y ya tenemos configurado Log4j para que redireccione los mensajes de logging a colas JMS usando ActiveMQ como implementación de JMS.
Comentarios
También pondré una referencia en el mío, para que tenga algo muy bueno, aunque sea referenciado ;)
Un abrazo.
Gregorio.
Saludos.
Yeray.