Posts Tagged ‘log’

Rotar log en Apache

Friday, January 11th, 2008

Hay varias maneras de rotar logs, pero voy explicar como hacerlo con una utilidad llamada rotatelogs. El post se basa en una distribución Debian y Apache 2. Esta utilidad la podemos encontrar en el paquete apache2-utils, lo instalaremos


$ aptitude install apache2-utils

Una vez instalado tenemos que verificar la ruta en donde se instaló, utilizaremos el siguiente comando


# whereis rotatelogs
rotatelogs: /usr/sbin/rotatelogs /usr/share/man/man8/rotatelogs.8.gz

La salida del comando nos indica que el binario esta en la carpeta /usr/bin, la otra ruta es la entrada en el man lo cual no nos sirve.

whereis es un comando que sirve para localizar archivos binarios, fuentes o páginas de manual.

Luego nos vamos a los archivos de configuración de nuestro servidor en /etc/apache2/sites-enabled/ (ver comentario de este post) y en mi caso edito el archivo de configuración default agregando la siguiente linea


<VirtualHost *>
...
TransferLog "|usr/sbin/rotatelogs /var/log/apache2/error.log 100M"
...
</VirtualHost>

Nota: también se podría haber editado el archivo apache2.conf que se encuentra /etc/apache2, debido al contexto de la directiva.

Expliquemos un poco lo que hemos hecho, la directiva TransferLog le dice a Apache que “entube” la información del log a un programa externo (por eso el signo | al comienzo), el programa lo indicamos entre comillas que en este caso es rotatelogs y luego indicamos los parametros propios de rotatelogs, la ruta del log que rotaremos (/var/log/apache2/error.log) y el tamaño que tendrá el archivo para ser rotado(100M), 100 MegaBytes.

En vez de especificar un tamaño para el rotado, se puede también indicar un tiempo, por ejemplo cada 1 semana


TransferLog "|usr/sbin/rotatelogs /var/log/apache2/access.log 604800"

Nota: el tiempo de rotado se especifica en segundos, en el ejemplo tenemos 7 * 24 * 60 * 60

Y para terminar, al rotar los log podríamos agregarle la fecha en que se roto, para tener más control


 TransferLog "|usr/sbin/rotatelogs /var/log/apache2/%y%m%d_error.log 5M"

Al rotar nos quedaría un archivo como 080101_error.log, %y indica el año en dos dígitos, %m indica el mes con dos dígitos y %d indica el día con dos dígitos.