Логирование: что это, уровни логов и как это работает

Логирование: что это, уровни логов и как это работает Полезное

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

Логи — это что

Логи (англ. logs) — это хронологические записи о работе системы или приложения. Каждая строка лога обычно фиксирует одно событие: время, тип события и краткое описание того, что произошло.

Записи складываются в отдельный файл, который называют лог-файлом или журналом. Для разработчика и системного администратора такой журнал — это черный ящик программы: по нему видно, что и в какой момент происходило, какие ошибки возникали и как система на них реагировала.

Логи используют для четырех основных задач:

  • поиск причины сбоя (что случилось перед падением);
  • мониторинг работы сервиса в реальном времени;
  • аудит безопасности (кто и когда входил, были ли подозрительные действия);
  • анализ нагрузки и поведения пользователей.

Один пример: когда пользователь открывает сайт, веб-сервер обычно пишет в лог адрес запрошенной страницы, IP-адрес клиента, дату и время, а также код ответа (например, 200 — успех, 404 — страница не найдена, 500 — ошибка сервера).

Типы логов

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

Тип лога Что фиксирует Пример события
Системные Работу операционной системы Запуск и остановка службы
Серверные События веб- или другого сервера HTTP-запрос к странице
Логи приложений Внутреннюю логику программы Оплата заказа прошла успешно
Базы данных Обращения к СУБД Медленный SQL-запрос
Аутентификации Входы и права доступа Неудачная попытка входа
Почтовые Работу почтовых сервисов Письмо доставлено или отклонено

Это деление условное и зависит от инфраструктуры. В небольшом проекте все может писаться в один файл, а в крупной системе логи каждого сервиса собирают отдельно и отправляют в централизованное хранилище.

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

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

В большинстве языков и библиотек используют пять базовых уровней. Ниже — стандартная шкала на примере модуля logging из Python (в скобках — числовое значение уровня).

Уровень Значение Когда применять
DEBUG (10) Подробности для отладки: значения переменных, шаги алгоритма Разработка и поиск бага
INFO (20) Обычные события: сервис запущен, задача выполнена Мониторинг штатной работы
WARNING (30) Что-то пошло не так, но программа продолжает работать Некорректный ввод, близкий к концу диск
ERROR (40) Операция не выполнилась, часть функций сломана Не удалось сохранить файл
CRITICAL (50) Тяжелый сбой, работа под угрозой полной остановки Нет связи с базой данных

Уровни выстроены по возрастанию важности. Если задать программе минимальный уровень, скажем WARNING, то сообщения DEBUG и INFO записываться не будут, а WARNING, ERROR и CRITICAL — будут. Это ключевой прием: в разработке ставят низкий порог (DEBUG), чтобы видеть все детали, а в рабочем окружении (production) поднимают порог, чтобы не захламлять диск и не мешать производительности.

Названия уровней могут отличаться. Например, во многих системах встречаются TRACE (еще подробнее, чем DEBUG), WARN вместо WARNING и FATAL вместо CRITICAL. Смысл шкалы при этом одинаковый — от самого подробного к самому серьезному.

Как логирование выглядит в коде

Посмотрим на модуль logging — это встроенный инструмент логирования в Python, ставить ничего не нужно. Простейший пример:

import logging

logging.basicConfig(level=logging.INFO)

logging.info("Сервис запущен")
logging.warning("Мало свободной памяти")
logging.error("Не удалось подключиться к базе")

Вывод в консоль:

INFO:root:Сервис запущен
WARNING:root:Мало свободной памяти
ERROR:root:Не удалось подключиться к базе

Каждая строка показывает уровень, источник (root — логгер по умолчанию) и текст сообщения.

Частая ошибка новичка

Типичная ситуация: человек пишет отладочное сообщение и не видит его в консоли.

import logging

logging.debug("значение x = 5")
# ожидали увидеть строку в консоли

Фактический результат — пусто, в консоль ничего не выводится:

Причина в том, что по умолчанию модуль logging показывает сообщения только с уровня WARNING и выше, а DEBUG (10) ниже этого порога. Исправление — явно задать нужный уровень до вызова:

import logging

logging.basicConfig(level=logging.DEBUG)
logging.debug("значение x = 5")
# DEBUG:root:значение x = 5

Формат и запись в файл

На практике логи почти всегда снабжают датой и временем и пишут в файл, а не в консоль. Это делается той же функцией basicConfig:

import logging

logging.basicConfig(
    level=logging.INFO,
    format="%(asctime)s %(levelname)s %(message)s",
    filename="app.log",
)

logging.info("Пользователь вошел в систему")

После запуска в файле app.log появится строка вида:

2026-09-09 12:30:05,123 INFO Пользователь вошел в систему

Механизмы формирования и хранения логов

Логи можно записывать по-разному, и выбор зависит от того, кто и как будет их читать.

  • Текстовый файл. Самый распространенный вариант: строки обычного текста, легко открыть и прочитать глазами. Подходит почти для любых задач.
  • Структурированный формат (например, JSON). Каждая запись — объект с полями. Такие логи неудобно читать вручную, зато их легко фильтровать и анализировать автоматически. Это стандарт для крупных систем.
  • Бинарные записи. Компактны и быстры, но читаются только специальной программой. Пример — системный журнал journald в Linux.
  • Запись в базу данных. Удобна для поиска и отчетов, но при большом потоке событий может замедлять саму базу, поэтому объем такой записи ограничивают.

Отдельная задача — хранение. Логи держат там, откуда их можно быстро получить: на сервере, в облачном хранилище или в централизованной системе сбора логов. Доступ к журналам ограничивают, потому что в них попадают чувствительные данные (IP-адреса, действия пользователей).

Важно и не переусердствовать: если писать слишком много и слишком подробно, логи съедят место на диске и замедлят работу. Поэтому уровень детализации подбирают под задачу.

Выводы

  • Логи — это хронологические записи о событиях в программе или системе; логирование — процесс их создания.
  • Главная польза логов — находить причины сбоев, следить за работой сервиса и фиксировать действия для аудита безопасности.
  • Уровни логирования (DEBUG, INFO, WARNING, ERROR, CRITICAL) — это метки важности; они позволяют отфильтровать лишнее и оставить нужное.
  • Порог уровня настраивают под окружение: подробный DEBUG при разработке и более высокий порог в production.
  • Частая ошибка новичка — не видеть сообщения DEBUG или INFO, потому что по умолчанию порог стоит на WARNING.
  • Формат хранения (текст, JSON, бинарный, база данных) выбирают по тому, будут ли логи читать люди или разбирать программы.

Где применяется / связь с практикой

Освойте тему на практике

Логирование — базовый навык любого разработчика: без внятных логов почти невозможно понять, почему программа упала в бою, где ее не получится запустить в отладчике. Начинают обычно с простого — встроенного модуля logging в Python, а дальше подключают уровни, форматирование и запись в файл. Разобраться с основами языка и на практике настроить логирование помогает курс Python Basic.

Освойте тему на практике

Если пока хочется просто посмотреть, как устроено обучение и подойдет ли направление, стоит заглянуть на бесплатные вебинары — там можно послушать преподавателей и задать вопросы вживую.

Смежные темы: Логирование в Python, Ошибки в PHP: виды и логирование, Логирование в ASP.NET Core.

FAQ

Чем логирование отличается от отладки в отладчике (дебаггере)?
Отладчик останавливает программу и дает пошагово изучить ее прямо во время работы, но обычно только на своей машине. Логи же копятся сами и остаются после запуска, поэтому по ним можно разобрать сбой, который случился на сервере, когда вас там не было.

Как долго нужно хранить логи?
Единого правила нет: подробные отладочные логи часто чистят через несколько дней, а логи безопасности и доступа хранят месяцами из-за требований аудита. Срок задают политикой хранения и ротацией — автоматическим удалением или архивированием старых файлов.

Можно ли писать в логи пароли и персональные данные?
Нет. Пароли, номера карт и другие чувствительные данные в логи попадать не должны: файл могут прочитать администраторы или он утечет при взломе. Такие поля маскируют или вырезают до записи.

OTUS Журнал
Скидка 10% 7-13 сентября на курсы из спецкаталога (pop-up)