Files

79 lines
2.4 KiB
Markdown

# Логирование
---
## Формат строки лога
```
[ISO8601] [LEVEL] [component] message key=val
```
Пример:
```
2026-05-10T14:30:00.000Z INFO [auth] User logged in user_id=abc123
2026-05-10T14:30:01.000Z WARNING [ai] Yandex GPT timeout retry=1 max_retries=2
2026-05-10T14:30:02.000Z ERROR [sync] Sync failed for user_id=abc123 error="Connection refused"
```
---
## Уровни по слоям
| Слой | DEBUG | INFO | WARNING | ERROR |
|------|-------|------|---------|-------|
| **API** | Параметры запроса | Request обработан | — | 5xx ошибки |
| **Service** | Входные данные | Операция выполнена | Превышен лимит | Ошибка БД |
| **Integration** | Raw ответ провайдера | Успешный вызов | Timeout, retry | Внешний API ошибка |
| **Agent** | Checksum вычислен | Агент выполнен | Версия не совпала | Ошибка выполнения |
---
## Правила
- **Запрещены f-строки в logger.** Только %s (lazy evaluation):
```python
# ПЛОХО:
logger.info(f"User {user_id} logged in")
# ХОРОШО:
logger.info("User %s logged in", user_id)
```
- **Структурированные данные** передавайте как extra:
```python
logger.info("Idea analyzed", extra={"idea_id": idea_id, "duration_ms": duration})
```
---
## Sensitive Data
**Никогда не логировать:**
- Пароли (даже хэш)
- JWT токены
- API keys и секреты
- Email в открытом виде (логировать user_id)
- IP адреса полностью (маскировать: 195.208.*.*)
---
## Конфигурация
```python
import logging
logging.basicConfig(
level=logging.INFO,
format="%(asctime)s.%(msecs)03dZ %(levelname)s [%(name)s] %(message)s",
datefmt="%Y-%m-%dT%H:%M:%S",
)
```
---
## [ASK] Вопросы по логированию
- Структурированное логирование (JSON) или текстовое? (JSON — для production)
- Отправлять логи в централизованную систему? (рекомендуется для production)
- Нужен ли audit log для операций с данными? (да, если регуляторные требования)