4Trabes Historias de una empresa en 100 metros cuadrados

El blog de Trabe Soluciones

Manteniendo los logs a raya

| | Comentarios

Si hay algo que detesto de mi máquina de desarrollo es encontrarme con que los logs de las aplicaciones Rails han crecido hasta ocupar cientos de megas. La configuración por defecto de Rails asume que todo el log irá a un fichero y que es el usuario el que configura como quiere que se gestionen la rotación en producción (en Trabe solemos usar logrotate).

Hay varias opciones para mantener a raya los logs en desarrollo. La primera es configurar en config/environments/development.rb el Logger de Rails para que rote los ficheros:

1
config.logger = Logger.new(config.paths.log.first, 0, 2.megabytes)

Con estos parametros nuestro fichero de log rotaría al alcanzar 2 megas y no almacenaríamos ficheros antiguos (así es como me gusta a mi, pero en la documentación de la clase Logger podéis ver que hay más opciones de rotación.

Otra posibilidad es utilizar un servicio de loggin del operativo, por ejemplo usar syslog y configurarlo como prefiramos.

1
config.logger = SyslogLogger.new

Esta opción es más flexible ya que nos permite tener fuera de la aplicación la configuración (así cada desarrollador puede ponerla a su gusto). De todos modos, al igual que en el primer caso, esto nos obliga a acordarnos de configurar el logger cada vez que creamos una nueva aplicación y eso es “demasiado esfuerzo”. Mi solución favorita es no tocar nada en las aplicaciones Rails y utilizar un servicio de rotación de logs como se hace en producción: lograte en Linux y newsyslog en Mac OSX, configurado de tal modo que se roten todos los logs de las aplicaciones que estoy desarrollando.

Con lograte, añadimos un fichero en la carpeta /etc/logrotate.d/ tal que así:

1
2
3
4
5
6
7
/home/david/code/*/log/*.log {
  size 2M
  rotate 0
  create 640 david users
  copytruncate
  missingok
}

y si usamos newsyslog lo añadimos a la carpeta /etc/newsyslog.d/:

1
2
# logfilename                  [owner:group]    mode count size    when  flags [/pid_file] [sig_num]
/Users/david/code/**/log/*.log david:staff      640  0     2048    *     GN

Easy peasy lemon squeezy ;)

Comments