Tecnología · GUÍA PRÁCTICA
¿La rotación de Python perdió líneas? Verifique el cambio de inode y la unión
Use un solo propietario de rotación, compare el descriptor abierto con la ruta y compruebe cada registro numerado una sola vez.

Que logrotate termine bien y exista un app.log nuevo no demuestra que Python dejó de escribir en el inode renombrado. WatchedFileHandler comprueba dispositivo e inode antes de cada emit en sistemas tipo Unix; verifique descriptor, ruta y registros.
Use un solo propietario de rotación: rename-create externo con WatchedFileHandler o un único manejador interno, nunca ambos. Numere los registros alrededor del límite y acepte solo una secuencia exacta sin huecos ni duplicados.
1. Elija un solo propietario
Si logrotate renombra app.log y crea otro, conecte solo WatchedFileHandler y no añada un manejador rotatorio interno.
En Windows o sistemas de archivos con otra semántica de inode, pruebe en el montaje y cuenta reales antes de aplicar este método.
2. Registre identidad del descriptor y la ruta
Antes de rotar, haga flush y registre dispositivo e inode con os.fstat y os.stat; ambos deben identificar el mismo objeto.
Registre también permisos y propietario: un problema de CPython muestra que la reapertura falla si desaparece el directorio destino.
3. Renombre, cree y emita una vez
Renombre app.log a app.log.1 y cree el nuevo archivo con permisos revisados antes de la siguiente escritura.
Emita un centinela numerado y haga flush; el descriptor debe coincidir con el inode de la ruta nueva y el rotado debe conservar el inode anterior.
4. Pruebe cada registro una vez
Escriba seq-001 a 003 antes y seq-004 a 006 después. Lea ambos archivos completos: la unión debe ser la esperada y cada valor aparecer una vez.
La prueba local con CPython 3.12.14 no tuvo faltantes ni duplicados y el descriptor posterior coincidió con la ruta nueva.
5. Rechace atajos que ocultan el límite
copytruncate no es una alternativa sin pérdidas; el manual advierte de una ventana entre copia y truncado.
No compare solo el total de líneas ni la existencia de la ruta nueva: un faltante y un duplicado pueden conservar el mismo total.
6. Registre los límites
La prueba demuestra solo la combinación observada de Python, sistema de archivos, cuenta y configuración; no cubre sistemas remotos, contenedores ni Windows.
Repita tras cambiar versión, manejador, política, montaje, permisos o cuenta, y supervise errores de reapertura.
