Ответ
Структурированное логирование — это практика записи логов в виде последовательности пар ключ-значение (чаще всего в формате JSON), а не в виде простого текста. Это делает логи машиночитаемыми, что кардинально упрощает их поиск, фильтрацию, агрегацию и анализ с помощью специализированных систем, таких как ELK Stack (Elasticsearch, Logstash, Kibana), Grafana Loki или Splunk.
Стандартная библиотека: slog
(Go 1.21+)
Начиная с версии Go 1.21, в стандартную библиотеку был добавлен пакет slog
для структурированного логирования.
import (
"log/slog"
"os"
)
func main() {
logger := slog.New(slog.NewJSONHandler(os.Stdout, nil))
logger.Info(
"Пользователь выполнил вход",
"user_id", 12345,
"action", "login",
"status", "success",
)
}
Вывод:
{"time":"2023-10-27T10:00:00.000Z","level":"INFO","msg":"Пользователь выполнил вход","user_id":12345,"action":"login","status":"success"}
Популярные сторонние библиотеки:
sirupsen/logrus
: Один из самых популярных и старых пакетов. Имеет хуки для интеграции с различными сервисами.uber-go/zap
: Разработан в Uber с упором на максимальную производительность и минимальные аллокации памяти.
Ключевые преимущества:
- Машиночитаемость: Легко парсить и индексировать.
- Контекстуальность: Позволяет добавлять к сообщению произвольные поля с контекстом (ID пользователя, ID трассировки и т.д.).
- Централизация и анализ: Упрощает сбор логов из разных сервисов в одном месте и их последующий анализ.