Durante um log de rotação, as mensagens podem acabar no arquivo antigo ou no novo, mas de forma determinística. Logrotate faz aproximadamente o seguinte para cada arquivo de log:
- Renomeie o log para o nome arquivado
- Sinalize o aplicativo para reabrir seus registros
- Opcionalmente, comprima o arquivo de log
Se as mensagens forem logadas entre 1 e 2, elas terminarão no log renomeado, porque uma renomeação não afeta os descritores de arquivos abertos (também é por isso que a compactação só acontece após aplicativos reabrir seus logs ). Mensagens registradas após 2 terminarão no novo log.
Aqui está um trecho da minha configuração logrotate que faz o que eu descrevi para os logs do nginx:
/var/log/nginx/*.log {
compress
delaycompress
postrotate
[ ! -f /run/nginx.pid ] || kill -USR1 'cat /run/nginx.pid'
endscript
}