Adicionado na versão 3.8.0 (embora olhando para o histórico do svn, parece que foi realmente adicionado em 3.7.9):
- added "dateyesterday" option (see man page)
Minha configuração de logrotate do Apache tem esta aparência:
/var/log/http/*log {
monthly
dateext
dateformat .%Y.%m
[... rest stripped for brevity ...]
}
Isso funciona muito bem, exceto que a data no nome do arquivo girado é um período posterior ao período realmente coberto pelos logs, por exemplo, error_log.2012.09
abrange de 2012-08-01 a 2012-08-31.
Eu percebo que existem outras opções para o Apache (por exemplo, cronolog), mas eu tenho um monte de outros logs que eu também preciso rodar, e logrotate é realmente exatamente o que eu preciso além desta questão.
Existe uma maneira de fazer o logrotate usar um deslocamento de data - ou, melhor ainda, descobrir o período de tempo anterior - ao gerar o nome do arquivo girado?
Adicionado na versão 3.8.0 (embora olhando para o histórico do svn, parece que foi realmente adicionado em 3.7.9):
- added "dateyesterday" option (see man page)
se logrotate em seu distrib ainda não tiver a opção 'dateyesterday', você pode usar scripts como os seguintes:
LOGFILE="$1"
LOGMTIME="$(env LC_ALL='C' stat $LOGFILE |awk '/^Modify/{print $2}')"
LOGSTART=$(( $(date +%Y%m%d -d "${LOGMTIME}") - 1 ))
mv $LOGFILE ${LOGFILE%-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]}-$LOGSTART
Notas:
Tags logrotate