0Pricing
Go Academy · Урок

Зачем нужны структурированные журналы

Ведение журналов в машиночитаемом формате

«Зачем нужны структурированные журналы» — бесплатный урок Go Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Go Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Go Academy содержит 4 уроков всего.

Журналы, понятные машинам

Традиционные журналы представляют собой строки в свободной форме: "user 42 logged in from 1.2.3.4". Их легко читать людям, но машинам трудно выполнять по ним запросы. Структурированное журналирование выдаёт пары «ключ–значение», поэтому агрегаторы журналов могут надёжно фильтровать и объединять данные.

Проблема строковых журналов

Разбор произвольного текста ненадёжен:

  • Форматы со временем меняются
  • Регулярные выражения ломаются на особых случаях
  • Нельзя легко запросить «все события, в которых userID=42»

Структурированные журналы делают каждое поле полноценным атрибутом, по которому можно выполнять запросы.

slog входит в стандартную библиотеку

Начиная с Go 1.21 структурированное журналирование находится в пакете стандартной библиотеки log/slog. Внешняя зависимость не требуется.

import "log/slog"

Ваш первый структурированный журнал

Самый простой вызов записывает сообщение и атрибуты в виде пар «ключ–значение»:

package main

import "log/slog"

func main() {
    slog.Info("user logged in", "userID", 42, "ip", "1.2.3.4")
}

Чтение вывода

Обработчик по умолчанию выводит примерно следующее:

  • 2009/11/10 23:00:00 INFO user logged in userID=42 ip=1.2.3.4

Каждый атрибут представляет собой отдельную пару key=value, готовую для разбора машиной.

Встроенные уровни

slog предоставляет четыре уровня: Debug, Info, Warn, Error. Каждый принимает сообщение и чередующиеся атрибуты «ключ–значение».

slog.Warn("disk almost full", "freePct", 5)
slog.Error("db connection failed", "attempt", 3)

Пары «ключ–значение»

Атрибуты передаются как чередующиеся аргументы: ключ, значение, ключ, значение. Лишний непарный аргумент записывается со специальной отметкой !BADKEY, поэтому следите, чтобы аргументы образовывали пары.

slog.Info("order placed", "orderID", 1001, "total", 49.99)

JSON для рабочей среды

В рабочей среде обычно выводят JSON, чтобы средства доставки журналов (Loki, ELK, CloudWatch) могли автоматически индексировать поля. В slog есть предназначенный именно для этого обработчик JSON; он рассматривается в следующем уроке.

Сравнение со старым пакетом log

Классический пакет log выводит только строки. slog сохраняет привычный стиль, но добавляет структуру, уровни и подключаемые обработчики, не требуя сразу менять всю кодовую базу.

Когда структурирование особенно полезно

Структурированное журналирование особенно полезно, когда:

  • Вы централизуете журналы множества сервисов
  • Вы создаёте панели мониторинга и оповещения на основе полей
  • Вам нужно сопоставлять запросы по идентификатору

Выполняемая программа: структурированный вывод

Запустите эту программу, чтобы увидеть структурированные атрибуты в выводе по умолчанию.

package main

import "log/slog"

func main() {
    slog.Info("request handled",
        "method", "GET",
        "path", "/health",
        "status", 200,
        "ms", 12,
    )
}

Быстрая проверка

Проверьте, насколько хорошо Вы поняли структурированное журналирование.

Итоги

Вы узнали, зачем нужны структурированные журналы:

  • По атрибутам «ключ–значение» можно выполнять запросы машинными средствами
  • log/slog входит в стандартную библиотеку (Go 1.21 и новее)
  • Встроенные уровни: Debug, Info, Warn, Error
  • Передавайте атрибуты чередующимися парами «ключ, значение»

Далее: выбор текстовых обработчиков и обработчиков JSON.

Часто задаваемые вопросы

Урок «Зачем нужны структурированные журналы» бесплатный?

Да — полный текст урока «Зачем нужны структурированные журналы» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Go Academy, подпишись на CoddyKit PRO. Курс Go Academy содержит 4 уроков всего.

Чему я научусь в уроке «Зачем нужны структурированные журналы»?

Ведение журналов в машиночитаемом формате Ты практикуешь Go Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Go Academy?

Предыдущий опыт не требуется. Go Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.

Сколько времени занимает урок «Зачем нужны структурированные журналы»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Go Academy?

Да. Каждый урок Go Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Зачем нужны структурированные журналы
  2. Обработчики slog
  3. Уровни журналирования и атрибуты
  4. Пользовательские обработчики
← Назад к Go Academy