
Encontré un ejemplo de cómo realizar una rotación de registros en Nginx.aquí
Pero una prueba simple con:
set $date "2018-08-24";
access_log /home/tim/log/access-http-$date.log default;
genera un archivo de registro llamado access-http-.log
. Estoy usando nginx 1.13.6 (con openresty).
Actualizar
Después de mucho pirateo y ajustes, se me ocurrió el siguiente script logrotate para rotar los diferentes archivos de registro que produce nginx. Lo puse en /etc/logrotate. El problema restante es que los registros no rotan diariamente (no estoy seguro de por qué en este momento), pero logrotate -f <filename>
produce exactamente el resultado que quiero.
Una nota interesante es que nginx -s reload
se puede utilizar en lugar de USR1. Desafortunadamente, no se hace referencia a eso en la página de registro de nginx, pero lo encontré (en la página de manual IIRC). Construyo openresty/nginx manualmente para incorporar los módulos adicionales que necesito para no obtener varios extras que vienen en la versión empaquetada como el mantenimiento de 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
}
Supongo que esto será útil para cualquiera con una configuración nginx grande que sirva tanto para páginas web como para una API. Mantengo el http separado ya que no sirvo páginas que no sean https y mantiene los scripts infantiles fuera de los registros de mis páginas.
Respuesta1
Simplemente configure una tarea cron durante un minuto hasta la medianoche para mover el archivo de registro y cambiarle el nombre con la fecha y luego enviar una señal USR1 a Nginx. Esto hará que vuelva a abrir los archivos de registro y cree uno nuevo para el día siguiente.
59 23 * * * mv /var/log/nginx/access.log /var/log/nginx/$(date +%F).access.log && kill -USR1 $(cat /run/nginx.pid)