19 feb. 2013

Configurar Log4j para trazar en Syslog (Ubuntu 12.04)

Hoy vamos a hablar de Log4j, una vez más (y contando)... en el trabajo he necesitado realizar modificaciones en el proyecto para conseguir algo que antes no era necesario pero ahora es fundamental... seguro que os suena de algo.

El tema es que la aplicación dispone de un mecanismo de auditoría para registrar las acciones de los usuarios (una especie de pilla-pilla), este mecanismo traza a un fichero (audit.log) este fichero tiene un formato para poder ser consultado sin problemas desde un visor de archivos estándar, pero se quiere que sea una aplicación externa y en remoto la que consulte y explote los datos que se trazan, así que ha habido que realizar cambios para que, además de a ese fichero, realice logging en el syslog de sistema, lo cual nos lleva al título de este post...

Empecemos con la tarea, lo primero que deberemos hacer es elegir el Appender de Log4j adecuado, la gente de Apache Logging Services (http://logging.apache.org/) que de esto parece que entiende un poco tiene el Appender adecuado  SyslogAppender.

El primer paso es completar nuestro archivo de configuración de Log4j (por simplicidad/comodidad usaré el formato properties) para que use este nuevo Appender añadiendo lo siguiente:

# Appenders para logger de Auditoría
log4j.appender.AUDIT=org.apache.log4j.RollingFileAppender
log4j.appender.AUDIT.File=audit.log
log4j.appender.AUDIT.MaxFileSize=100000KB
log4j.appender.AUDIT.MaxBackupIndex=3
log4j.appender.AUDIT.layout=org.apache.log4j.PatternLayout
log4j.appender.AUDIT.layout.ConversionPattern=%d{dd-MM-yyyy HH:mm:ss} - %m%n

# Appender para syslog
log4j.appender.SYSLOG=org.apache.log4j.net.SyslogAppender
log4j.appender.SYSLOG.Facility=USER
log4j.appender.SYSLOG.SyslogHost=localhost
log4j.appender.SYSLOG.Threshold=INFO
log4j.appender.SYSLOG.layout=org.apache.log4j.PatternLayout
log4j.appender.SYSLOG.layout.ConversionPattern=%d{dd-MM-yyyy HH:mm:ss} - %m%n

# Logging de auditoría
log4j.logger.com.blogger.tecnodologos.audit.AuditAspect=INFO,AUDIT,SYSLOG

Una vez que tenemos esto configurado, debemos configurar el log de la máquina local para trazar por la facility definida, para esto deberemos realizar los siguientes pasos:

    1. Editar el fichero de configuración de syslog sudo vi /etc/rsyslog.conf
    2. Descomentar estas líneas:
    $ModLoad imudp
    $UDPServerRun 514
    3. Salir de vi salvando los cambios.
    4. Editar el fichero de configuración por defecto de syslog sudo vi /etc/rsyslog.d/50-default.conf
    5. Descomentar la línea:
    user.*                          -/var/log/user.log
    6. Salir de vi salvando los cambios.
    7. Reiniciar el servicio de syslog ejecutando:
    sudo /etc/init.d/rsyslog restart

Para comprobar que el funcionamiento es correcto no tenemos más que hacer tail -f /var/log/user.log y veremos como las trazas de auditoría quedan registradas en este log.

Y con esto ya tenemos operativo Log4j para trazar al fichero y al syslog de la máquina.

Si queremos que el log sea otro distinto de user.log tendremos que configurar el facility tanto en el archivo de propiedades como en el indicado en el punto 4, así si queremos que el fichero sea audit.log, deberemos cambiar la línea:
    log4j.appender.SYSLOG.Facility=USER
por:
    log4j.appender.SYSLOG.Facility=LOCAL1

Añadir en el fichero /etc/rsyslog.d/50-default.conf la línea:
    local1.*                        -/var/log/audit.log

Reiniciar el servicio y listo!

Espero que sirva de ayuda para aquellos que lo necesitéis en algún momento.

Un saludo y, como siempre, a disfrutar!


No hay comentarios: