Ответ
slog — это пакет для структурированного логирования, который был добавлен в стандартную библиотеку Go начиная с версии 1.21. Он предоставляет более мощный, гибкий и производительный механизм логирования по сравнению со старым пакетом log.
Основная проблема, которую решает slog, — это создание логов, которые легко читать не только человеку, но и машине (системам сбора и анализа логов, таким как ELK Stack, Grafana Loki, Datadog).
Ключевые особенности и преимущества:
- Уровни логирования: Встроенная поддержка уровней (
Debug,Info,Warn,Error), что позволяет гибко настраивать детализацию логов для разных окружений. - Структурированный вывод: Логи по умолчанию выводятся в виде пар
ключ=значениеили в формате JSON. Это упрощает их парсинг, фильтрацию и индексацию. - Контекстная информация: Возможность добавлять атрибуты к логгеру, которые будут присутствовать во всех последующих сообщениях. Отлично интегрируется с
context.Context. - Высокая производительность:
slogразработан с упором на минимизацию аллокаций и накладных расходов, что делает его одним из самых быстрых решений для логирования в Go. - Гибкая настройка: Позволяет легко заменять обработчик (
Handler) для изменения формата вывода (например, JSON, logfmt) или направления (stdout, файл, сетевое хранилище).
Пример использования:
package main
import (
"log/slog"
"os"
)
func main() {
// Создаем логгер с обработчиком, который пишет JSON в stdout
logger := slog.New(slog.NewJSONHandler(os.Stdout, nil))
// Логируем событие с дополнительными атрибутами
logger.Info("user logged in",
slog.Int("user_id", 12345),
slog.String("ip_address", "192.168.1.101"),
)
}Пример вывода (JSON):
{"time":"2023-10-27T10:00:00.000Z","level":"INFO","msg":"user logged in","user_id":12345,"ip_address":"192.168.1.101"}В целом, slog становится стандартом для логирования в современных Go-приложениях, заменяя сторонние библиотеки во многих проектах.