Открыть сервисСервис

Логгер — программа записи событий

Логгер (англ. 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
Заметили ошибку или не согласны с информацией в статье? Напишите нам support@bfometr.ru