
Encontrei um exemplo de rotação de log no Nginxaqui
Mas um teste simples com:
set $date "2018-08-24";
access_log /home/tim/log/access-http-$date.log default;
produz um arquivo de log chamado access-http-.log
. Estou usando o nginx 1.13.6 (com openresty).
Atualizar
Depois de muitos hacks e ajustes, criei o seguinte script logrotate para girar os diferentes arquivos de log que o nginx produz. Eu coloquei em /etc/logrotate. O problema restante é que os logs não giram diariamente (não tenho certeza do porquê no momento), mas logrotate -f <filename>
produzem exatamente o resultado que desejo.
Uma observação interessante é que nginx -s reload
pode ser usado no lugar do USR1. Infelizmente, isso não é mencionado na página de registro do nginx, mas eu o encontrei (na página de manual do IIRC). Eu construo o openresty/nginx manualmente para incorporar os módulos extras necessários, para não receber vários extras que vêm na versão empacotada, como a manutenção do pid.
/path/to/log/access-http.log /path/to/log/access-https.log /path/to/log/api.log /path/to/log/error.log {
daily
missingok
notifempty
create 664 nobody tim
dateext
dateformat -%Y-%m-%d
dateyesterday
rotate 10
su tim tim
postrotate
/usr/local/bin/openresty -s reload
endscript
}
Acho que isso será útil para qualquer pessoa com uma configuração grande do nginx servindo páginas da web e uma API. Eu mantenho o http separado, pois não sirvo páginas que não sejam https e isso mantém a porcaria do script infantil fora dos registros da minha página.
Responder1
Basta definir uma tarefa cron por um minuto até meia-noite para mover o arquivo de log e renomeá-lo com a data e, em seguida, enviar um sinal USR1 para o Nginx. Isso fará com que ele reabra os arquivos de log e crie um novo para o dia seguinte.
59 23 * * * mv /var/log/nginx/access.log /var/log/nginx/$(date +%F).access.log && kill -USR1 $(cat /run/nginx.pid)