12. XI. Logs

Por: Artiko
12factorlogsstdoutobservabilidad

12. XI. Logs

Trata los logs como flujos de eventos.

Logs son un flujo, no un archivo

Un log no es un archivo estático que se lee una vez terminado: es la transmisión continua de eventos ordenados en el tiempo, capturados de la salida de todos los procesos en ejecución, mientras la aplicación funciona.

Responsabilidad de la aplicación: solo escribir a stdout

Una aplicación twelve-factor nunca gestiona ni enruta sus propios archivos de log. No abre archivos de log, no rota logs, no decide dónde se archivan. Su única responsabilidad es escribir cada evento, sin buffering, a stdout (salida estándar).

flowchart LR
    subgraph App["Proceso de la app"]
        Log["Escribe eventos a stdout"]
    end
    App --> Dev["Terminal del developer<br/>(desarrollo)"]
    App --> Runtime["Entorno de ejecución<br/>(staging/producción)"]
    Runtime --> Tools["Logplex, Fluentd,<br/>Splunk, Hadoop/Hive"]

En desarrollo: la terminal es suficiente

Durante el desarrollo local, el developer observa este flujo directamente en su terminal para entender el comportamiento de la app en tiempo real.

En producción: el entorno de ejecución captura y enruta

En staging y producción, es el entorno de ejecución (el orquestador, la plataforma cloud, el sistema de contenedores) el que captura las transmisiones de stdout de todos los procesos y las redirige a uno o más destinos finales para revisión y archivado. La aplicación no configura ni conoce esos destinos — esa es una preocupación de infraestructura, separada deliberadamente de la lógica de negocio.

Herramientas del ecosistema

Sistemas como Logplex (Heroku) y Fluentd capturan y centralizan estos flujos. Plataformas de análisis como Splunk o Hadoop/Hive permiten después:

Por qué separar esta responsabilidad

Si la app decidiera por sí misma cómo y dónde archivar sus logs, cada cambio de infraestructura (mover de un proveedor de logging a otro, cambiar de formato de almacenamiento) exigiría tocar código de la aplicación. Al delegar el ruteo al entorno de ejecución, la app se mantiene simple y la infraestructura puede evolucionar de forma independiente.

Checklist del factor XI

El último factor del manifiesto cubre las tareas que se ejecutan fuera del flujo normal de la app: la administración de procesos.