[Ruby on Rails] Comment recycler les logs de son application?
Je sais, je devais faire une note sur les raisons qui m’ont poussées a choisir Ruby on Rails, mais avec le développement de Pronostikr, sa mise en production et un déménagement en cours, pas facile de trouver le temps pour une note détaillée.
Au lieu de ca, je vais plutôt essayer de mettre en ligne les quelques problèmes que j’ai rencontrés pour le déploiement de mon appli, et surtout comment j’ai pu résoudre ce problème!
Aujourd’hui: comment recycler les logs?
Alors que cela me semblait être plus que simple (et il se trouve que c’est très simple en effet
), j’ai parcouru pas mal de blogs et forums avant de trouver une solution satisfaisante. J’ai donc d’abord cherché une solution Rails, comme un gem ou un plugin, mais rien de très concluant de ce coté. C’est ainsi que je suis tombé sur LogRotate, commande Linux simple et puissante qui est la pour vous faciliter la vie pour tout ce qui touche a la rotation des fichiers de logs!
Comment l’utiliser?
Déjà, lire le man logrotate ![]()
Ensuite, voici ma configuration que j’ai définie dans /MON APPLI/config/logrotate.conf
# Rotate Rails application logs
/MON APPLI/log/*.log {
compress
weekly
delaycompress
missingok
notifempty
copytruncate
rotate 10
}
Voici ce que fait chaque ligne:
- la première ligne est la pour définir le chemin vers les logs de votre application
- compress, option pour indiquer si vous souhaitez que les anciens logs soient compressés pour sauver de l’espace disque
- weekly, car je veux que mes logs soient archivés 1 fois par semaine. Vous pouvez aussi les changer tous les jours (daily) ou 1 fois par mois (monthly)
- delaycompress : pour compresser les logs a partir de la deuxieme fois ou ils sont archivés
- missingok : ne génère pas d’erreur si un fichier de log est absent
- notifempty : évite d’archiver les logs qui sont vides
- copytruncate : fait une copie de sauvegarde du fichier de log avant de l’effacer
- rotate 7 : le nombre maximum d’archives que je veux garder
Etant sur un hébergement partagé, pas moyen pour moi d’écrire sous /etc (la ou se trouve logrotate.conf par défaut). Mais il est possible de lancer logrotate en précisant non seulement le fichier de configuration que l’on souhaite, mais aussi le fichier logrotate.status (option -s), qui garde un trace des différents archivages. L’option -f permet de redémarrer logrotate immédiatement. Sinon, l’archivage se déroulera automatiquement en fonction de votre configuration (le jour d’après, la semaine d’après, …)
/usr/sbin/logrotate -f -s ./config/logrotate.status ./config/logrotate.conf
Et voila, le tour est joué!