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

Что такое логгер?

1.0 Junior🔥 241 комментариев
#Тестирование

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

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

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

Логгер (Logger) в Python

Логгер — это объект из модуля logging, который позволяет записывать сообщения о событиях, происходящих во время выполнения программы. Это критичный инструмент для отладки, мониторинга и анализа поведения приложения в production.

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

Основные компоненты

  • Logger — объект, который регистрирует события
  • Handler — определяет куда отправлять логи (консоль, файл, сеть)
  • Formatter — определяет формат сообщений
  • Filter — фильтрует сообщения по условиям

Уровни логирования

От наименее до наиболее серьёзных:

DEBUG (10)      — детальная информация для диагностики
INFO (20)       — подтверждение правильной работы
WARNING (30)    — предупреждение о возможной проблеме (по умолчанию)
ERROR (40)      — серьёзная проблема, функция не выполнена
CRITICAL (50)   — критическая ошибка, программа может упасть

Простой пример

import logging

logger = logging.getLogger(__name__)

logger.debug('Отладочная информация')
logger.info('Информационное сообщение')
logger.warning('Это предупреждение')
logger.error('Произошла ошибка')
logger.critical('Критическая ошибка!')

По умолчанию выводится в консоль, начиная с WARNING.

Настройка логгера

import logging

logger = logging.getLogger()
logger.setLevel(logging.DEBUG)

console_handler = logging.StreamHandler()
console_handler.setLevel(logging.DEBUG)

formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
console_handler.setFormatter(formatter)
logger.addHandler(console_handler)

logger.debug('Это отладочное сообщение')

Вывод:

2024-01-15 10:30:45 - root - DEBUG - Это отладочное сообщение

Логирование в файл

import logging

logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)

file_handler = logging.FileHandler('app.log')
file_handler.setLevel(logging.DEBUG)

formatter = logging.Formatter('%(asctime)s | %(levelname)-8s | %(name)s | %(message)s')
file_handler.setFormatter(formatter)
logger.addHandler(file_handler)
logger.info('Приложение запущено')

Практический пример с функцией

import logging

logger = logging.getLogger(__name__)

def divide(a, b):
    try:
        logger.debug(f'Попытка разделить {a} на {b}')
        result = a / b
        logger.info(f'Результат деления: {result}')
        return result
    except ZeroDivisionError:
        logger.error(f'Попытка деления на ноль: {a} / {b}')
        raise
    except Exception as e:
        logger.critical(f'Неожиданная ошибка: {e}')
        raise

Логирование исключений

import logging

logger = logging.getLogger(__name__)

try:
    result = 1 / 0
except Exception as e:
    logger.error(f'Ошибка при вычислении: {e}', exc_info=True)

Логгеры с иерархией

import logging

app_logger = logging.getLogger('myapp')
db_logger = logging.getLogger('myapp.database')
api_logger = logging.getLogger('myapp.api')

Лучшие практики

  • Используй именованные логгеры для каждого модуля
  • Логируй на разных уровнях: DEBUG для разработки, INFO для отслеживания, ERROR для проблем
  • Логируй контекст: переменные, пользователь, запрос
  • Избегай print() — используй только logging
  • В production используй файлы логов с ротацией
  • Не логируй чувствительные данные (пароли, токены)
  • Используй структурированное логирование (JSON) для больших систем

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