Логгер — программа записи событий¶
Логгер (англ. logger, от to log — «записывать в журнал») — программа или программный модуль, предназначенный для записи сообщений о событиях, происходящих в программном обеспечении или операционной системе. Логгер формирует записи (логи), содержащие информацию о работе приложения: ошибки, предупреждения, действия пользователя, состояние системы. Логгеры широко используются в разработке, администрировании и тестировании программного обеспечения.
¶Назначение и принцип работы
Логгер перехватывает сообщения, которые генерирует программа, и сохраняет их в определённом формате. Каждая запись обычно содержит:
- временную метку (timestamp);
- уровень важности (уровень логирования);
- имя источника (модуль, класс или компонент);
- текст сообщения;
- дополнительные данные (контекст, идентификаторы, параметры).
Программист встраивает вызовы логгера в код приложения. Вместо того чтобы выводить сообщения на экран, программа передаёт их логгеру, а тот решает, куда и в каком виде их записать.
¶Уровни логирования
Практически все логгеры поддерживают иерархию уровней важности, позволяющую фильтровать сообщения. Стандартный набор уровней (используемый в библиотеках log4j, logback, Python logging и других):
| Уровень | Назначение |
|---|---|
| DEBUG | Подробная отладочная информация |
| INFO | Информационные сообщения о штатной работе |
| WARNING | Предупреждения — потенциальные проблемы |
| ERROR | Ошибки, приведшие к сбоям отдельных операций |
| CRITICAL | Критические сбои, требующие немедленного вмешательства |
Уровень настраивается: в продакшен-среде обычно записываются сообщения уровня WARNING и выше, при отладке — DEBUG и выше.
¶Назначения вывода (appenders)
Логгер может направлять записи в различные «приёмники» (appenders):
- файл на диске;
- стандартный поток вывода (консоль);
- системный журнал операционной системы (syslog, Windows Event Log);
- сетевой сервис сбора логов;
- база данных.
Одновременно можно использовать несколько назначений: например, писать в файл и отправлять критические ошибки по электронной почте.
¶Форматирование
Логгеры поддерживают настраиваемые шаблоны форматирования. Пример записи в текстовом формате:
`` 2024-03-15 14:23:45 ERROR [http-nio-8080-exec-1] c.e.OrderService - Failed to process order id=1234 ``
Помимо простого текста, логгеры часто умеют выводить структурированные данные — JSON, что удобно для дальнейшей машинной обработки.
¶Основные реализации
¶Java
- java.util.logging — стандартная библиотека JDK;
- Log4j — одна из первых и наиболее распространённых библиотек (в 2021 году в Log4j2 была обнаружена критическая уязвимость Log4Shell);
- SLF4J — фасад, унифицирующий доступ к разным логгерам;
- Logback — реализация, рекомендованная для использования со SLF4J.
¶Python
Модуль logging входит в стандартную библиотеку. Поддерживает иерархию логгеров, обработчики (handlers), форматтеры и фильтры.
¶JavaScript / Node.js
- Winston — популярный фреймворк с поддержкой множества транспортов;
- Pino — высокопроизводительный логгер, формирующий JSON-записи;
- Bunyan — логгер, ориентированный на структурированные логи.
¶C# / .NET
Встроенная подсистема ILogger и фреймворк Serilog, поддерживающий структурированное логирование.
¶Go
Стандартный пакет log, а также сторонние библиотеки — Zap и Zerolog — отличающиеся высокой производительностью.
¶Системное логирование
Помимо прикладного логирования, термин «логгер» применяется к утилитам операционных систем:
- syslog — служба и протокол в Unix-подобных системах, принимающая сообщения от различных демонов;
- journalctl — утилита управления системным журналом systemd в Linux;
- Windows Event Log — подсистема журналирования Windows, куда пишут службы и приложения.
¶Логирование в промышленной разработке
В крупных распределённых системах логи собираются централизованно: с помощью агентов (Filebeat, Fluentd, Logstash) записи передаются в системы анализа — ELK-стек (Elasticsearch, Logstash, Kibana), Graylog, Grafana Loki. Это позволяет искать события по нескольким серверам, строить дашборды и настраивать алерты.
¶Интересные факты
- Термин «лог» восходит к корабельным журналам, где капитаны записывали события плавания.
- Стандарт RFC 5424 описывает протокол syslog, используемый для передачи сообщений о событиях в сетях.
- Объём логов в крупных компаниях может достигать терабайтов в сутки, что делает их хранение и обработку отдельной инженерной задачей.
¶Источники
- Справочник по библиотеке
loggingдокументации Python - Документация проекта Apache Log4j
- Документация SLF4J
- RFC 5424 — The Syslog Protocol
- Документация Node.js Winston и Pino
