← Назад к вопросам

Что такое логирование?

2.0 Middle🔥 211 комментариев
#Soft Skills и личные качества

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI28 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Что такое логирование?

Логирование — это процесс записи всех событий, действий и ошибок, происходящих в системе. Лог (англ. log — журнал) содержит информацию о том, что произошло в приложении, когда это случилось и при каких обстоятельствах. Логирование — это глаза и уши разработчиков и DevOps инженеров.

Зачем нужно логирование?

1. Отладка и устранение неполадок (Debugging)

Когда что-то сломалось:

  • Разработчик смотрит логи
  • Находит строку с ошибкой
  • Понимает, где и почему произошла проблема
  • Быстро исправляет

Без логов: Тыкаем в темноте и гадаем, что случилось

2. Мониторинг и аналитика (Monitoring & Analytics)

  • Сколько пользователей заходило сегодня?
  • На каких операциях система зависает?
  • Какие features самые популярные?
  • Где пользователи сталкиваются с ошибками?

3. Безопасность (Security)

  • Кто и когда осуществлял доступ?
  • Были ли попытки несанкционированного доступа?
  • Какие данные изменили и кто?
  • Обнаружение аномальной активности

4. Соответствие нормативам (Compliance)

  • GDPR требует логирования доступа к персональным данным
  • PCI DSS требует логирования операций с платежами
  • Финансовые системы должны вести аудит-логи

5. Производительность (Performance)

  • Какие запросы самые медленные?
  • На какой части кода тратится больше времени?
  • Где узкие места (bottlenecks)?

Уровни логирования (Log Levels)

DEBUG

  • Уровень: Самый детальный
  • Кто читает: Разработчики при отладке
  • Пример: "User clicked on button X", "Database query took 150ms"
  • В продакшене: Обычно отключен

INFO

  • Уровень: Информационные сообщения
  • Пример: "User registered: ivan@example.com", "Email sent successfully"
  • В продакшене: Включен

WARNING (WARN)

  • Уровень: Предупреждение о потенциальных проблемах
  • Пример: "Rate limit approaching", "Database response time > 500ms", "Deprecated API used"
  • В продакшене: Включен

ERROR

  • Уровень: Ошибка, которая нарушает функциональность
  • Пример: "Failed to send email", "Database connection lost", "Invalid payment amount"
  • В продакшене: Включен и требует внимания

CRITICAL / FATAL

  • Уровень: Критическая ошибка, система не может работать
  • Пример: "Out of memory", "Database completely unavailable", "Payment system down"
  • В продакшене: Немедленный алерт DevOps

Структура логов

Хороший лог содержит:

[2026-03-28 14:35:42.123] [ERROR] [AuthService] Auth failed for user: ivan@example.com
Reason: Invalid password attempt (3/5)
Request ID: req-12345
User IP: 192.168.1.1
Stack trace: ...

Компоненты логов:

  1. Timestamp: Точное время события
  2. Level: ERROR, INFO, DEBUG и т.д.
  3. Component/Module: Из какого модуля логирование?
  4. Message: Что произошло?
  5. Context: Дополнительные данные (user_id, request_id, IP)
  6. Stack trace: При ошибках — полная трассировка стека

Где хранятся логи?

Локальное хранилище

  • Файлы: /var/log/app.log
  • Простая ротация: Стареют автоматически
  • Плюсы: Не требует инфраструктуры
  • Минусы: Сложно искать по миллиардам строк

Централизованное логирование

Используются специальные системы:

  • ELK Stack (Elasticsearch, Logstash, Kibana)
  • Splunk
  • DataDog
  • Sentry (для ошибок)
  • Grafana Loki

Преимущества:

  • Поиск по всем логам системы
  • Визуализация и аналитика
  • Алерты при критических ошибках
  • Корреляция логов из разных сервисов

Пример логирования в коде

# Python + Logging
import logging

logger = logging.getLogger(__name__)

def authenticate_user(email, password):
    logger.info(f"Authentication attempt for {email}")
    try:
        user = db.find_user(email)
        if not user:
            logger.warning(f"User not found: {email}")
            return False
        
        if verify_password(password, user.password_hash):
            logger.info(f"User {email} authenticated successfully")
            return True
        else:
            logger.warning(f"Invalid password for {email}")
            return False
    except Exception as e:
        logger.error(f"Authentication failed for {email}: {str(e)}", exc_info=True)
        raise

Хорошие практики логирования

Что логировать?

✅ Начало и конец критических операций ✅ Ошибки с полным контекстом ✅ Доступ к чувствительным данным ✅ Значительные изменения состояния системы ✅ Попытки входа (успешные и неудачные) ✅ Интеграции с внешними сервисами

Что НЕ логировать?

❌ Пароли и токены ❌ Персональные данные (если не требует compliance) ❌ Каждый SQL запрос (если не отлаживаем) ❌ Чрезмерно детальную информацию на PRODUCTION ❌ Одну ошибку 100 раз (группировка)

Производительность

  • Асинхронное логирование (не блокировать основной поток)
  • Ротация старых логов
  • Правильные уровни логирования в разных окружениях
  • Не забывать про утечки памяти (memory leaks) при логировании больших объектов

Пример реальной ситуации

Проблема: Приложение регулярно падает

Без логирования:

  • Разработчик: "Хм, не знаю, почему упало"
  • Остаток недели потрачен на угадывание

С логированием:

  • Смотрим логи → видим ERROR в 14:35
  • Видим stack trace → сразу ясно, где ошибка
  • Видим context (какой пользователь, какой запрос) → можно воспроизвести
  • Исправляем за 30 минут

Что BA должен знать о логировании?

  1. Требования: Какие события должны логироваться?
  2. Compliance: Есть ли требования по сохранению логов?
  3. Privacy: Какие данные можно логировать?
  4. Мониторинг: Какие метрики нужно отслеживать?
  5. Алерты: На какие события нужны оповещения?
  6. Retention: Как долго хранить логи?

Логирование — это не деталь реализации, это стратегическое требование системы.

Что такое логирование? | PrepBro