Log Rotation: cómo funciona, estrategias de rotación y configuración para proyectos móviles

Autor: IT Sectr Publicado: 2026-05-28 Tiempo de lectura: 8 min

Log Rotation es un mecanismo automático de gestión de archivos de registro que evita el desbordamiento del disco mediante el archivado, compresión y eliminación de registros antiguos. En aplicaciones móviles, los registros se acumulan en el dispositivo del usuario y sin rotación pueden ocupar gigabytes de memoria en pocas semanas de uso. Según la Documentación de Redis, una configuración correcta de log rotation reduce el riesgo de fallo del sistema por disco lleno en un 99% en comparación con el crecimiento descontrolado de registros. Las principales estrategias de rotación son: por tamaño de archivo, por tiempo y por cantidad de archivos — cada una se elige según el caso de uso: logrotate en Linux, CocoaLumberjack en iOS y Timber en Android admiten los tres enfoques.

Puntos clave

  • Log Rotation — cambio automático del archivo de registro activo al alcanzar un umbral definido, con archivado o eliminación de archivos antiguos
  • Rotación por tamaño — crea un nuevo archivo cuando el actual alcanza el límite (típicamente 10–100 MB), el antiguo se comprime a .gz
  • Rotación por tiempo — cambio de archivo cada N horas o una vez al día independientemente del tamaño, conveniente para volcados diarios
  • logrotate — la utilidad estándar de Linux para la rotación automática de registros del sistema y de aplicaciones
  • Cuota de disco — limita el volumen total de todos los registros en el dispositivo; al superarse, se eliminan los archivos más antiguos

Qué es Log Rotation

Log Rotation es el proceso de cambiar periódicamente el archivo de registro activo por uno nuevo, archivando, comprimiendo o eliminando el anterior. Sin rotación, un solo archivo de registro crece indefinidamente hasta llenar toda la partición del disco, lo que provoca fallos en la aplicación y pérdida de datos.

Escenario típico: una aplicación escribe registros en el archivo app.log. Cuando app.log alcanza 100 MB, el sistema lo renombra a app.log.1, lo comprime a app.log.1.gz y crea un nuevo app.log vacío. En el siguiente llenado, app.log.1 pasa a ser app.log.2, app.log.1.gz pasa a app.log.2.gz y el antiguo app.log.2.gz se elimina. Este mecanismo se llama rotación con keep count — el número de copias de archivo es fijo.

Según Splunk (2023), la configuración incorrecta de rotación es la causa del 40% de los incidentes relacionados con el agotamiento del espacio en disco en servidores de aplicaciones. Para dispositivos móviles, la rotación es aún más crítica porque el usuario no puede ni debe gestionar los registros manualmente.

Estrategias de rotación de registros

Log Rotation admite tres estrategias básicas que se pueden combinar. La elección de la estrategia depende del tipo de aplicación: los sistemas servidores suelen usar rotación por tiempo, los móviles por tamaño y los sistemas embebidos por cantidad de archivos.

EstrategiaDisparadorCuándo usarla
Por tamañoEl archivo alcanzó N bytesSistemas de alta carga con volumen de registros impredecible
Por tiempoPasaron N horas/díasVolcados diarios, requisitos de cumplimiento
Por cantidad de archivosSe crearon N archivosDispositivos móviles con espacio en disco limitado

Rotación por tamaño — la más común

La rotación por tamaño garantiza que ningún archivo de registro supere un límite determinado. El límite se elige según el espacio disponible en disco y la frecuencia de registro. Para un servidor, el límite típico es de 100–500 MB por archivo, para un dispositivo móvil — de 1–10 MB. Si la aplicación registra de forma agresiva, el límite debe reducirse, de lo contrario la rotación ocurrirá cada pocos minutos.

Rotación por tiempo — para cumplimiento normativo

La rotación por tiempo es independiente del volumen de registros — el archivo se cambia estrictamente según un horario. Es conveniente para sistemas donde los registros deben almacenarse un número fijo de días: rotación diaria con keep count = 30 significa 30 días de almacenamiento. La desventaja — un solo archivo puede crecer hasta un gigabyte por día bajo carga intensiva.

logrotate en Linux: configuración y ejemplos

logrotate es la utilidad estándar de Linux para la rotación automática de registros. Se ejecuta mediante cron y procesa archivos de configuración de /etc/logrotate.d/. Cada servicio (nginx, postgresql, aplicación) crea su propia configuración especificando las rutas de los registros, la estrategia de rotación y las acciones posteriores a la rotación.

cpp
# /etc/logrotate.d/myapp — rotación de registros de la aplicación
/var/log/myapp/*.log {
    daily
    rotate 7
    compress
    delaycompress
    missingok
    notifempty
    create 0640 www-data www-data
    postrotate
        kill -HUP $(cat /var/run/myapp.pid)
    endscript
}

Esta configuración rota los registros diariamente, conserva 7 copias de archivo, comprime los archivos antiguos con gzip (excepto el último — delaycompress), no genera error si faltan registros (missingok), no rota archivos vacíos (notifempty) y recrea el archivo con permisos 0640. Después de la rotación, envía una señal HUP al proceso de la aplicación mediante un script postrotate.

Parámetros de logrotate

size — rotación al alcanzar un tamaño (size 100M). rotate — número de copias de archivo (rotate 7). compress — compresión gzip. dateext — añade la fecha al nombre del archivo en lugar de un número secuencial. sharedscripts — ejecuta postrotate una vez para todos los archivos, no para cada uno individualmente. maxage — elimina archivos más antiguos de N días.

Log Rotation en aplicaciones móviles

En dispositivos móviles, Log Rotation es crítica porque el usuario no gestiona el sistema de archivos y no espera que la aplicación ocupe gigabytes con registros. iOS y Android tienen mecanismos integrados: os_log en iOS usa un búfer circular de tamaño fijo (rotación por sobrescritura), Android Logcat tiene un búfer limitado en el kernel.

Para registros de archivo personalizados en iOS se usa CocoaLumberjack con la clase DDFileLogger, que admite rotación por tamaño y por tiempo. En Android — Logback o implementaciones personalizadas mediante RollingFileAppender. Ambas herramientas permiten establecer el tamaño máximo de archivo y la cantidad de archivos.

swift
// CocoaLumberjack — rotación de archivos en iOS
import CocoaLumberjack

let fileLogger = DDFileLogger()
fileLogger.maximumFileSize = 1024 * 1024 // 1 MB
fileLogger.logFileManager.maximumNumberOfLogFiles = 5
DDLog.add(fileLogger)

iOS: os_log no requiere rotación — los mensajes se sobrescriben en el búfer circular. Pero si la aplicación escribe registros de archivo personalizados (para depuración o envío al servidor), la rotación debe configurarse manualmente. CocoaLumberjack es la opción estándar para equipos iOS — comprime automáticamente los archivos a .gz y elimina los antiguos al superar el límite.

Por qué la rotación es importante en Android

Android no restringe a las aplicaciones la escritura de registros en su propio directorio. Si un desarrollador escribe registros de depuración en un archivo sin rotación, en un mes de uso activo pueden ocupar de 500 MB a 1 GB. El usuario descubrirá el problema cuando el sistema muestre una advertencia de espacio insuficiente y eliminará la aplicación. Logback con RollingFileAppender resuelve este problema: un límite de 5 MB con 3 archivos garantiza que los registros nunca superen los 20 MB.

Ejemplos de implementación de rotación en iOS y Android

A continuación se muestran ejemplos de configuración de rotación de registros en ambas plataformas. En iOS se usa CocoaLumberjack, en Android — Logback con configuración XML.

kotlin
// Logback en Android — configuración de rotación en logback.xml
// Tamaño de archivo 5MB, 3 copias de archivo
@file:Suppress("unused")

// En logback.xml:
// <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
//   <file>${DATA_DIR}/logs/app.log</file>
//   <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
//     <fileNamePattern>app.%i.log.gz</fileNamePattern>
//     <minIndex>1</minIndex>
//     <maxIndex>3</maxIndex>
//   </rollingPolicy>
//   <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
//     <maxFileSize>5MB</maxFileSize>
//   </triggeringPolicy>
// </appender>

CocoaLumberjack en iOS admite no solo la rotación por tamaño sino también la eliminación de registros antiguos por fecha mediante logFileManager.maximumLogFiles. Si se establece maximumLogFiles = 0, el límite se elimina — los registros se acumularán indefinidamente, lo cual es peligroso para producción.

swift
// Rotación personalizada con verificación de volumen total
class SizeAwareLogger {
    let maxTotalSize: Int64 = 20 * 1024 * 1024

    func enforceQuota(at logDirectory: URL) {
        let files = (try? FileManager.default
            .contentsOfDirectory(
                at: logDirectory,
                includingPropertiesForKeys: [.fileSize]
            )) ?? []
        let total = files.reduce(0) {
            $0 + (try? $1.resourceValues(forKeys: [.fileSize])
                .fileSize).map(Int64.init) ?? 0
        }
        if total > maxTotalSize {
            // Eliminar el archivo más antiguo
            files.sorted { $0.path < $1.path }.first.map {
                try? FileManager.default.removeItem(at: $0)
            }
        }
    }
}

Monitoreo y alertas en la rotación

Log Rotation no solo es archivado automático sino también un indicador de salud del sistema. Si los registros rotan con demasiada frecuencia (cada pocos minutos), es una señal de registro excesivo o de un bucle de registro de errores. Configure alertas sobre la frecuencia de rotación: más de 10 rotaciones por hora es motivo de revisión.

Los sistemas de monitoreo (Prometheus, Grafana, Datadog) pueden rastrear métricas de rotación mediante exportadores del sistema de archivos. Prometheus node_exporter proporciona métricas de tamaño de archivos y tiempo de modificación. En dispositivos móviles, el monitoreo de rotación suele estar integrado en el SDK: CocoaLumberjack registra el evento de rotación mediante DDLog, y Logback envía el estado a través de un appender.

Alertas: si hay más archivos de los esperados (el recuento de rotación superó el límite) o el volumen total de registros superó la cuota — el sistema debe notificar al administrador. Para servidores, el umbral estándar es el 80% del tamaño de la partición; para dispositivos móviles — una alerta cuando se superan los 50 MB por aplicación.

Preguntas frecuentes

¿Qué tamaño de archivo de registro es óptimo para la rotación?

Para servidores — 100–500 MB, para aplicaciones móviles — 1–10 MB. Un límite demasiado pequeño (menos de 1 MB) provoca rotaciones frecuentes y operaciones de E/S innecesarias. Un límite demasiado grande (más de 500 MB) aumenta el tiempo de apertura y búsqueda en el archivo.

¿Cuántas copias de archivo de registro se deben conservar?

Para producción — al menos 7 días (rotación diaria) o 3–5 archivos (rotación por tamaño). Para requisitos de cumplimiento — 30–90 días, pero use un almacenamiento separado con compresión y política de retención, no rotación en la misma partición.

¿Cómo funciona logrotate en dispositivos móviles?

logrotate es una utilidad de Linux — no está disponible en iOS ni Android. En dispositivos móviles, la rotación la implementan bibliotecas: CocoaLumberjack para iOS y Logback para Android. No requieren acceso root y funcionan en el entorno sandbox de la aplicación.

¿Qué hacer si los registros rotan cada minuto?

Verifique si hay registro circular — cuando el manejo de errores genera un nuevo error. Agregue protección: un contador de registros repetidos del mismo tipo con un umbral (no más de 100 mensajes idénticos por minuto) y un bloqueo temporal después de superarlo.

¿Es obligatorio comprimir los archivos de registro?

No es obligatorio, pero se recomienda. gzip comprime los registros de texto entre 10 y 20 veces sin pérdida de datos. En dispositivos móviles, la compresión reduce el espacio ocupado de 50 MB a 3–5 MB. El único inconveniente es que el archivo no se puede leer sin descomprimir, pero para el análisis normalmente solo se necesita el archivo actual.

Resumen

  • Log Rotation — gestión automática de archivos de registro con creación de nuevos archivos al alcanzar un límite y archivado de los antiguos para evitar el desbordamiento del disco
  • Tres estrategias — por tamaño de archivo (la más común), por tiempo (para volcados) y por cantidad de archivos (para dispositivos móviles con espacio limitado)
  • logrotate — utilidad estándar de Linux para rotación del lado del servidor con parámetros flexibles: daily, size, compress, rotate, scripts postrotate
  • Bibliotecas móviles — CocoaLumberjack en iOS y Logback en Android admiten rotación por tamaño con compresión y límite de cantidad de archivos
  • Cuota de disco — límite total para todos los registros: 20 MB para aplicaciones móviles y 80% de la partición para servidores con alerta al superarse
  • Monitoreo — rotación demasiado frecuente (más de 10 veces por hora) señala registro circular de errores o volumen excesivo de registros
  • Compresión gzip — reduce el tamaño del archivo entre 10 y 20 veces, recomendada para todas las plataformas; delaycompress deja el último archivo sin comprimir para lectura rápida

Desarrollaremos una aplicación móvil llave en mano

IT Sectr crea aplicaciones para iOS y Android para startups y empresas desde 2017. Le asesoraremos y le propondremos la mejor solución.

Discutir el proyecto

Lea también