Ответ
В DevOps-скриптах и инструментах на Python я активно использую логирование для отладки и мониторинга. Вот основные библиотеки:
1. Стандартный модуль logging
- Применение: Базовый выбор для большинства скриптов автоматизации (Ansible модули, утилиты деплоя).
- Пример настройки для JSON-формата (важно для ELK/Grafana Loki):
import logging import json_log_formatter
formatter = json_log_formatter.JSONFormatter() json_handler = logging.FileHandler('/var/log/my_script.log') json_handler.setFormatter(formatter)
logger = logging.getLogger('deploy_script') logger.addHandler(json_handler) logger.setLevel(logging.INFO)
logger.info('Starting deployment', extra={'app': 'api-service', 'version': '1.2.3'})
**2. `structlog`**
- **Почему:** Идеален для структурированного логирования, которое потом парсится системами типа ELK Stack или Loki. Легко добавляет контекст (trace_id, hostname, stage).
- **Пример из практики:**
```python
import structlog
structlog.configure(
processors=[
structlog.processors.add_log_level,
structlog.processors.TimeStamper(fmt="iso"),
structlog.processors.JSONRenderer()
]
)
log = structlog.get_logger()
# Лог с контекстом для отслеживания пайплайна
log.error("Container health check failed",
container_id="abc123",
image="app:latest",
exit_code=137)
3. loguru
- Почему: Максимально простая настройка ротации логов и цветного вывода в консоль. Отлично подходит для внутренних утилит и скриптов, где нужна быстрая отладка.
- Пример:
from loguru import logger logger.add("/var/log/deploy.log", rotation="100 MB", compression="zip", format="{time} {level} {message}", level="INFO") logger.bind(task_id="deploy_567").info("Pulling new image from registry")
Для продакшена я обычно комбинирую: structlog для основного приложения (генерирует JSON) и стандартный logging для интеграции с системными демонами или когда пишу плагины для существующих инструментов (например, кастомный модуль для Ansible).