Logrotate est un programme qui permet de gérer la croissance et l'historique des fichiers de logs.

# Principe général

Le programme est exécuté régulièrement, avec un fichier de configuration en paramètre.
Par défaut, c'est `/etc/logrotate.conf` qui  charge toutes les configurations présentes dans `/etc/logrotate.d/`
Les paquets des programmes qui génèrent des logs (par exemple Apache, Postfix, ...) fournissent généralement une configuration pour logrotate.


# Stratégie de gestion

Il y a de très nombreuses stratégies de gestion des logs, en voici quelques unes illustrées.

cf. <https://manpages.debian.org/cgi-bin/man.cgi?query=logrotate>

## Applications Ruby

Pour les serveurs d'application comme Puma, Unicorn, ... :

~~~
/home/USER/apps/production/*/shared/log/*.log {
    su USER GROUP
    weekly
    missingok
    rotate 52
    compress
    delaycompress
    notifempty
    dateext
    dateformat .%Y-%m-%d
    dateyesterday
    copytruncate
}
~~~

Cette stratégie va faire une rotation hebdomadaire, conserver 52 semaines (1 an), compresser les logs passés après les avoir datés.

L'instruction `copytruncate` est importante car le descripteur de fichier ouvert par l'application ne va pas changer.

Pour vérifier qu'il n'y a pas d'erreurs de syntaxe :

~~~
logrotate /etc/logrotate.d/
~~~

## FAQ

Si erreur du type :

` error: skipping "*.log" because parent directory has insecure permissions (It's world writable or writable by group which is not "root")`

Uniquement l'utilisateur concerné par la gestion des logs doit avoir un accès en écriture à ce dossier. Soit un chmod 750 marche bien.