79 lines
2.4 KiB
Markdown
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 для операций с данными? (да, если регуляторные требования)
|