miércoles, 2 de abril de 2008

Rotar logs en Windows

En Windows, rotar los logs de una aplicación Rails que corre bajo mongrel y mongrel_service no es trivial. Mongrel bloquea el archivo por lo que una rotación por código, asignando a RAILS_DEFAULT_LOGGER una rotación por espacio o por tiempo desemboca en un error de sistema.

La mejor opción que he encontrado ha sido la fuerza bruta, el viejo método PRR: Parar, Rotar, Rearrancar. Para parar los servicios

En consola de sistema o un archivo batch, para parar un servicio

sc stop my_service_name

Si no se puede parar por cualquier razón, se pinta un código de error por pantalla, pero no lo devuelve en ninguna variable de entorno. Pero se puede comprobar de la siguiente manera:

sc query my_service_name | find "STOPPED"
if errorlevel 1 goto :non_stopped_service


y hacer lo sea necesario en la etiqueta :non_stopped_service

Para renombrar por batch el archivo de log y añadirle, por ejemplo, la fecha

set datestr=%DATE%
set timestr=%TIME%
set timestampstr=%datestr:~6,4%%datestr:~3,2%%datestr:~0,2%%timestr:~0,2%%timestr:~3,2%
ren e:\rails_apps\my_app\log\development.log development_%timestampstr%.log

Finalmente, para arrancar un servicio

sc start my_service_name

Para comprobar el estado en que quedan los servicios, sólo hay que jugar con el comando sc.

Salud y roncanrol¡

2 comentarios:

--- dijo...

¡Que tela que he llegado aqui de coña completamente!

Soy Paco Brevers de Vector ^^

Ya me han comentado que te va todo fenomenal asi que me alegro.

Gracias por la historia de la rotacion de logs, que lo sabia hacer en *NIX pero en windows ni guarra.

Nos vemos ^^

danimataonrails dijo...

Que pacha Paco!
Me alegro de saber de ti. Escríbeme a dani@danimata.com