Go Academy · Урок

Обработчики slog

Обработчики текста и JSON

Урок 2 из 413 шагов

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

Обработчики определяют формат

В slog Logger вызывает Handler, чтобы форматировать и записывать каждую запись. Замена обработчика меняет формат вывода, не затрагивая вызовы журналирования.

TextHandler

slog.NewTextHandler записывает удобные для человека строки key=value. Это хороший вариант для локальной разработки и терминалов.

package main

import (
    "log/slog"
    "os"
)

func main() {
    h := slog.NewTextHandler(os.Stdout, nil)
    logger := slog.New(h)
    logger.Info("hello", "env", "dev")
}

JSONHandler

slog.NewJSONHandler выдаёт по одному объекту JSON в каждой строке. Это идеальный вариант для рабочих конвейеров журналирования.

package main

import (
    "log/slog"
    "os"
)

func main() {
    h := slog.NewJSONHandler(os.Stdout, nil)
    logger := slog.New(h)
    logger.Info("hello", "env", "prod")
}

Создание логгера

slog.New(handler) оборачивает обработчик в Logger. Для этого экземпляра вызывайте logger.Info, logger.Error и другие методы.

logger := slog.New(slog.NewJSONHandler(os.Stdout, nil))

HandlerOptions

Второй аргумент конструктора обработчика — это *slog.HandlerOptions. Передайте nil, чтобы использовать значения по умолчанию, или настройте уровень и расположение исходного кода.

opts := &slog.HandlerOptions{
    Level:     slog.LevelDebug,
    AddSource: true,
}
h := slog.NewJSONHandler(os.Stdout, opts)

Запись в файл или буфер

Обработчики принимают любой объект io.Writer. Вы можете записывать журналы в файл, в буфер для проверок или в стандартный вывод. Такое разделение — один из ключевых принципов проектирования slog.

f, _ := os.Create("app.log")
logger := slog.New(slog.NewJSONHandler(f, nil))

Настройка логгера по умолчанию

slog.SetDefault(logger) заставляет функции уровня пакета (slog.Info и другие) использовать Ваш обработчик. Установите его один раз при запуске.

slog.SetDefault(slog.New(slog.NewJSONHandler(os.Stdout, nil)))
slog.Info("now JSON by default")

Текстовый вывод и вывод JSON

Один и тот же вызов, два формата:

  • Текст: time=... level=INFO msg=hello env=dev
  • JSON: {"time":"...","level":"INFO","msg":"hello","env":"dev"}

Выбор обработчика

Практическое правило:

  • Локальная разработка: TextHandler (удобен для чтения)
  • Рабочая среда и агрегация: JSONHandler (удобен для разбора)

Выбирайте вариант через переменную окружения, чтобы один и тот же двоичный файл мог адаптироваться.

Создание повторно используемой настройки

Централизуйте создание логгера, чтобы всё приложение использовало одну конфигурацию.

func newLogger(prod bool) *slog.Logger {
    if prod {
        return slog.New(slog.NewJSONHandler(os.Stdout, nil))
    }
    return slog.New(slog.NewTextHandler(os.Stdout, nil))
}

Выполняемая программа: смена обработчиков

Эта программа записывает одно и то же событие через оба обработчика, чтобы Вы могли сравнить форматы.

package main

import (
    "log/slog"
    "os"
)

func main() {
    text := slog.New(slog.NewTextHandler(os.Stdout, nil))
    js := slog.New(slog.NewJSONHandler(os.Stdout, nil))
    text.Info("login", "user", "ada")
    js.Info("login", "user", "ada")
}

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

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

Итоги

Вы узнали об обработчиках slog:

  • Обработчики форматируют и записывают записи, а Logger вызывает их
  • NewTextHandler предназначен для людей, а NewJSONHandler — для машин
  • Обработчики принимают любой io.Writer и *HandlerOptions
  • slog.SetDefault подключает функции уровня пакета
Можно начать бесплатно

Изучай Go с ИИ-репетитором — бесплатно

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

Курсы
51
Уроки
203

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

Урок «Обработчики slog» бесплатный?

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

Чему я научусь в уроке «Обработчики slog»?

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

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

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

Сколько времени занимает урок «Обработчики slog»?

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

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

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

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

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