- Home »

Как использовать логирование в Python 3
Если ты когда-нибудь ловил себя на мысли, что твой Python-скрипт на сервере ведёт себя как одичавший кот — то есть, делает что-то не то, но понять что именно невозможно — значит, пора внедрять логирование. В этой статье разберём, как использовать логирование в Python 3: зачем оно нужно, как быстро всё настроить, какие есть фишки и подводные камни, и почему это must-have для любого, кто занимается серверным хостингом, автоматизацией и поддержкой инфраструктуры. Всё по делу, с примерами, схемами и советами из реального опыта.
Зачем вообще нужно логирование?
Логирование — это как видеорегистратор для твоих скриптов и сервисов. Оно фиксирует, что происходит в коде: ошибки, предупреждения, инфу о запуске, завершении, подозрительных действиях. Без логов ты как слепой пилот: если что-то пошло не так, остаётся только гадать, где и почему. С логами — ты видишь всю картину, можешь быстро найти баг, понять, что сломалось, и даже предсказать будущие проблемы.
- Отладка: Быстро находишь, где и почему скрипт падает.
- Аудит: Видишь, кто и что запускал, какие данные обрабатывались.
- Мониторинг: Можно строить алерты и реагировать на аномалии.
- Безопасность: Логи — первое место, куда смотришь при подозрении на взлом.
В общем, если ты хочешь, чтобы твой сервер работал как часы, а не как лотерея, логирование — твой лучший друг.
Как это работает?
В Python 3 логирование реализовано через стандартный модуль logging
. Это не просто print в файл — это целая система с уровнями важности, форматированием, ротацией файлов, отправкой логов по сети и интеграцией с внешними системами (например, syslog, journald, ELK, Graylog и т.д.).
- Логгеры — объекты, которые ты используешь в коде для записи сообщений.
- Обработчики (Handlers) — определяют, куда отправлять логи (файл, консоль, syslog, email и т.д.).
- Форматтеры — отвечают за то, как будет выглядеть сообщение (дата, уровень, текст, стек вызова и т.д.).
- Фильтры — позволяют фильтровать сообщения по условиям.
Всё это настраивается через код или через конфиг-файл (например, YAML, JSON, ini). Можно строить сложные схемы: писать разные логи в разные места, для разных частей приложения.
Как быстро и просто всё настроить?
Окей, ближе к практике. Вот минимальный пример, который подойдёт для большинства серверных скриптов:
import logging
logging.basicConfig(
level=logging.INFO, # Уровень логирования
format='%(asctime)s [%(levelname)s] %(message)s',
handlers=[
logging.FileHandler("myapp.log"),
logging.StreamHandler()
]
)
logging.info("Скрипт стартовал")
logging.warning("Что-то подозрительное")
logging.error("Всё сломалось!")
Что тут происходит:
- level=logging.INFO — пишем всё, что выше INFO (INFO, WARNING, ERROR, CRITICAL).
- format — формат сообщения: дата, уровень, текст.
- handlers — пишем одновременно в файл и в консоль.
Если нужен более продвинутый вариант — например, ротация логов (чтобы не забить диск), вот так:
from logging.handlers import RotatingFileHandler
handler = RotatingFileHandler(
"myapp.log", maxBytes=10*1024*1024, backupCount=5
)
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s [%(levelname)s] %(message)s',
handlers=[handler]
)
Этот код создаёт лог-файл до 10 МБ, после чего начинает новый, а старых хранит до 5 штук. Это спасает от ситуации, когда лог-файл разрастается до гигабайтов и убивает сервер.
Примеры, схемы, практические советы
Кейс | Плохой пример | Хороший пример | Комментарий |
---|---|---|---|
Логирование ошибок |
|
|
logging.exception пишет стек вызова — это бесценно при отладке. |
Логирование в многопоточном приложении |
|
|
QueueHandler/QueueListener — безопасно для многопоточности. |
Логирование в Docker-контейнере |
|
|
В Docker лучше писать в stdout/stderr, чтобы логи собирались оркестратором. |
Практические советы и фишки
- Используй logging.config для сложных конфигов (YAML, ini) — удобно для больших проектов.
- Для интеграции с системными логами — SysLogHandler (для Linux) или NTEventLogHandler (Windows).
- Для отправки логов по email — SMTPHandler (но аккуратно, чтобы не спамить себя).
- Для асинхронных приложений (например, на asyncio) — смотри официальную документацию.
- Для структурированных логов (JSON) — сторонние библиотеки, например, python-json-logger.
- Для централизованного сбора логов — отправляй их в ELK, Graylog, Fluentd.
Команды для быстрой настройки
Если ты только что развернул сервер и хочешь быстро добавить логирование в свой Python-скрипт:
# Установить Python 3 (если не установлен)
sudo apt update
sudo apt install python3
# Создать виртуальное окружение (рекомендуется)
python3 -m venv venv
source venv/bin/activate
# Установить дополнительные пакеты для логирования (по желанию)
pip install python-json-logger
# Пример запуска скрипта с логированием
python3 myscript.py
Похожие решения, программы и утилиты
- loguru — сторонняя библиотека, более удобная альтернатива стандартному logging. GitHub
- structlog — для структурированных логов, интеграция с JSON, ELK и т.д. Официальный сайт
- Sentry — облачный сервис для сбора ошибок и логов, есть бесплатный тариф. sentry.io
- Graylog, ELK, Fluentd — для централизованного сбора и анализа логов.
Статистика и сравнение с другими решениями
Решение | Плюсы | Минусы | Когда использовать |
---|---|---|---|
logging (стандартный модуль) | Встроен, гибкий, поддерживает ротацию, фильтры, обработчики | Иногда громоздко, не очень дружелюбный синтаксис | 99% серверных скриптов, автоматизация, интеграция с системными логами |
loguru | Простой API, красивые логи, автоматическая ротация | Не стандарт, требует установки, не всегда совместим с legacy-кодом | Быстрые проекты, когда хочется удобства и красоты |
structlog | Структурированные логи, интеграция с JSON, ELK | Сложнее настройка, требует привыкания | Микросервисы, большие проекты, DevOps |
print() | Просто, не требует настройки | Нет уровней, нет ротации, нет формата, неудобно для анализа | Только для отладки, не для продакшена |
Интересные факты и нестандартные способы использования
- Можно логировать не только ошибки, но и метрики (время выполнения, количество обработанных запросов) — потом эти данные легко парсить и строить графики.
- Логи можно отправлять в Telegram-бота или Slack — для мгновенных алертов о критических ошибках.
- Логирование можно использовать для трассировки производительности — например, логировать время старта/завершения функций.
- Можно писать логи в базу данных (например, через pymongo-logger для MongoDB) — удобно для поиска и анализа.
- Логирование — отличный способ документировать поведение системы для будущих админов или коллег.
Какие новые возможности открываются и чем это поможет в автоматизации и скриптах?
- Автоматическая ротация логов — не забьёшь диск, не словишь out of space.
- Централизованный сбор логов — можно мониторить сразу десятки серверов и сервисов.
- Интеграция с системами мониторинга (Prometheus, Zabbix) — алерты по событиям в логах.
- Быстрая отладка и поиск багов — экономия времени и нервов.
- Аудит и безопасность — всегда можно посмотреть, кто и что делал на сервере.
- Гибкая настройка — можно логировать только нужные события, не засоряя логи мусором.
Вывод — заключение и рекомендации
Логирование в Python 3 — это не просто “чтобы было”. Это инструмент, который реально экономит время, деньги и нервы, особенно если ты работаешь с серверными скриптами, автоматизацией, поддержкой инфраструктуры. Стандартный модуль logging
закрывает 99% задач: от простого логирования в файл до сложных схем с ротацией, фильтрацией, отправкой по сети и интеграцией с внешними системами.
Рекомендую: всегда добавляй логирование в свои проекты, даже если это “маленький скриптик”. Используй уровни логов (DEBUG, INFO, WARNING, ERROR, CRITICAL), не забывай про ротацию файлов, и не стесняйся экспериментировать с форматами и обработчиками. Для больших проектов — смотри в сторону loguru, structlog, интеграции с ELK/Graylog.
Если ты только начинаешь — просто скопируй базовый пример из этой статьи, и ты уже на шаг впереди большинства. Если нужен VPS или выделенный сервер для своих проектов — зацени VPS или выделенные серверы на этом блоге.
Логи — это твой лучший друг. Не игнорируй их, и твои проекты будут работать надёжно, а ты — спать спокойно.
Официальная документация по logging: https://docs.python.org/3/library/logging.html
В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.
Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.