Зачем нужны структурированные журналы
Ведение журналов в машиночитаемом формате
«Зачем нужны структурированные журналы» — бесплатный урок 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 — локальная установка не требуется.
Все уроки этого курса
- Зачем нужны структурированные журналы
- Обработчики slog
- Уровни журналирования и атрибуты
- Пользовательские обработчики