Respuesta rápida: configura logging una sola vez al arrancar, con un nivel y un formato que incluya fecha, nivel y nombre del logger:
import logging
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s %(levelname)s %(name)s %(message)s'
)
logger = logging.getLogger('api')Usa logger en lugar de print y sigue la salida con journalctl -u app.service -f o docker logs --tail=50 api.
Nivel: inicial · Requiere: Python 3 (módulo logging de la biblioteca estándar)
Los logs sin nivel, contexto ni formato consistente hacen más lento detectar errores en producción. Una buena configuración de logging permite diagnosticar incidentes con más claridad, revisar eventos relevantes y dejar evidencia útil para mantenimiento.
Esta guía propone un enfoque conservador: cambios verificables, comandos claros, advertencias antes de acciones sensibles y una validación final para detectar errores antes de mover tráfico o datos reales.
Qué vas a construir
Una implementación base de logging en Python que podrás adaptar a un Cloud Server de DonWeb Cloud, a una instancia Linux propia o a un entorno de laboratorio.
El resultado esperado es una configuración documentada, con comandos de prueba y recomendaciones para pasar de laboratorio a producción.
Cuándo conviene usarlo
- Cuando necesitas una solución operativa y repetible, no solo una explicación conceptual.
- Cuando el servicio va a vivir en un servidor cloud y requiere seguridad básica desde el primer despliegue.
- Cuando necesitas dejar evidencia de configuración, pruebas y criterios de mantenimiento.
- Cuando quieres reducir configuraciones manuales difíciles de auditar.
Requisitos previos
Antes de empezar, asegúrate de contar con:
- Cloud Server o servidor Ubuntu/Debian actualizado.
- Usuario con permisos
sudoo rol equivalente. - Acceso SSH o consola segura.
- Backup previo si el servidor ya tiene datos o tráfico real.
- Dominio o subdominio si el artículo publica un servicio web.
- Credenciales con mínimo privilegio si se usan comandos AWS.
- Ventana de mantenimiento para cambios de red, firewall, runtime, base de datos o credenciales.
Arquitectura o flujo de trabajo
El flujo recomendado es:
- Preparar el entorno.
- Instalar o activar componentes.
- Configurar con archivos versionables.
- Probar localmente.
- Reforzar seguridad y documentar mantenimiento.
Evita cambiar varias capas a la vez. Si algo falla, una modificación incremental es más fácil de revisar y revertir.
Comandos principales
python app.pyjournalctl -u app.service -fgrep 'ERROR' app.log | tailpython -m json.tool < sample-log.jsondocker logs --tail=50 apiConfiguración base
import logging
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s %(levelname)s %(name)s %(message)s'
)
logger = logging.getLogger('api')Paso 1: Preparar el servidor o entorno
Antes de ejecutar este paso, revisa que estés en el servidor correcto y que tengas una ventana de mantenimiento si el servicio ya recibe tráfico.
python app.pyVerifica la salida antes de continuar. Si el comando modifica red, credenciales, firewall, base de datos o runtime de contenedores, toma una copia de seguridad y conserva una ruta de rollback.
Paso 2: Instalar o activar los componentes necesarios
Antes de ejecutar este paso, revisa que estés en el servidor correcto y que tengas una ventana de mantenimiento si el servicio ya recibe tráfico.
journalctl -u app.service -fVerifica la salida antes de continuar. Si el comando modifica red, credenciales, firewall, base de datos o runtime de contenedores, toma una copia de seguridad y conserva una ruta de rollback.
Paso 3: Configurar la solución
Define una configuración base para que los logs tengan nivel, fecha, nombre del logger y mensaje.
import logging
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s %(levelname)s %(name)s %(message)s'
)
logger = logging.getLogger('api')Verifica la salida antes de continuar. Si el cambio afecta runtime, credenciales, contenedores o servicios en ejecución, conserva una ruta de rollback.
Paso 4: Probar que funciona
Valida que el formato esperado pueda leerse correctamente antes de llevar el cambio a un entorno con tráfico real.
python -m json.tool < sample-log.jsonVerifica la salida antes de continuar. Si el comando modifica red, credenciales, firewall, base de datos o runtime de contenedores, toma una copia de seguridad y conserva una ruta de rollback.
Paso 5: Reforzar seguridad y dejar mantenimiento
Revisa los logs recientes del servicio o contenedor para confirmar que la aplicación registra eventos útiles sin exponer información sensible.
docker logs --tail=50 apiVerifica la salida antes de continuar. Si detectas credenciales, tokens o datos sensibles en logs, rota las credenciales primero y luego investiga el alcance.
Problemas frecuentes
Permisos insuficientes:
revisa el usuario, el grupo, el rol IAM o el contexto de Kubernetes antes de repetir comandos con más privilegios.
Puerto ocupado o cerrado:
valida con ss -tulpn, reglas de firewall y security groups antes de asumir que la aplicación falló.
Variables de entorno ausentes:
confirma .env, secretos del orquestador y que no se impriman credenciales en logs.
El servicio inicia pero no responde:
revisa healthchecks, logs, dependencia de base de datos y resolución DNS.
Rollback no definido:
conserva la versión anterior, snapshot, backup o manifiesto previo antes de aplicar cambios sensibles.
Buenas prácticas para producción
- Usa mínimo privilegio para usuarios, roles, contenedores y reglas de red.
- Versiona configuraciones sin incluir secretos.
- Prueba restauraciones de backup, no solo la creación del archivo.
- Activa logs y alertas antes de necesitar diagnosticar un incidente.
- Documenta quién puede ejecutar cambios y qué evidencia debe quedar.
- Revisa periódicamente dependencias, imágenes y paquetes del sistema.
Advertencias de seguridad
No ejecutes estos pasos contra infraestructura de terceros ni contra producción sin autorización.
Los comandos de seguridad se orientan a defensa, mitigación y auditoría autorizada. Si detectas credenciales expuestas, rota primero y luego investiga el alcance.
