ИНТЕГРАЦИЯ / GO

Логирование в Go через REST API

Один HTTP-POST из Go — и событие уже в клиенте Logger. Никаких агентов, коллекторов и стека хранилища: только доставка в реальном времени.

Один POST-запросБез хранения логов на сервере
01 / БЫСТРЫЙ СТАРТ

Отправка через net/http

Отправьте первое событие из Go за пару минут. Consumer Key выдаётся после регистрации в веб-интерфейсе.

package main

import (
    "bytes"
    "encoding/json"
    "fmt"
    "net/http"
    "time"
)

const url = "https://logger.dp-projects.ru/sendmess"

func logEvent(module string, mess map[string]any) error {
    payload := map[string]any{
        "key":    "ваш-consumer-key",
        "module": module,
        "mess":   mess,
        "mode":   "regular",
    }

    body, _ := json.Marshal(payload)
    client := &http.Client{Timeout: 5 * time.Second}

    resp, err := client.Post(url, "application/json", bytes.NewBuffer(body))
    if err != nil {
        return err
    }
    defer resp.Body.Close()

    fmt.Println("Статус:", resp.Status)
    return nil
}

func main() {
    logEvent("payment-service", map[string]any{
        "event":  "payment_processed",
        "amount": 1000,
        "status": "success",
    })
}
02 / ИНТЕГРАЦИЯ С ФРЕЙМВОРКОМ

Обёртка над log/slog

Начиная с Go 1.21 в стандартной библиотеке есть log/slog. Свой Handler отправит структурированные записи в Logger, сохранив единый интерфейс логирования.

type LoggerAPIHandler struct {
    Key    string
    Module string
}

func (h LoggerAPIHandler) Enabled(context.Context, slog.Level) bool { return true }

func (h LoggerAPIHandler) Handle(_ context.Context, r slog.Record) error {
    attrs := map[string]any{"message": r.Message}
    r.Attrs(func(a slog.Attr) bool {
        attrs[a.Key] = a.Value.Any()
        return true
    })

    payload, _ := json.Marshal(map[string]any{
        "key": h.Key, "module": h.Module, "mess": attrs,
    })

    go http.Post(url, "application/json", bytes.NewBuffer(payload))
    return nil
}

func (h LoggerAPIHandler) WithAttrs([]slog.Attr) slog.Handler { return h }
func (h LoggerAPIHandler) WithGroup(string) slog.Handler      { return h }

logger := slog.New(LoggerAPIHandler{Key: "ваш-consumer-key", Module: "go-app"})
slog.SetDefault(logger)
03 / ЧТО ВАЖНО ЗНАТЬ

Особенности логирования из Go

  1. 01

    Идемпотентно просто

    Обычный http.Client с таймаутом — никаких тяжёлых SDK.

  2. 02

    Структурированные логи

    mess принимает вложенные map, поэтому JSON-структуры из Go отображаются в клиенте как дерево.

  3. 03

    Без серверного архива

    Logger не хранит события на сервере — это сервис доставки в реальном времени.

04 / ВОПРОСЫ

Частые вопросы

Нужен ли Go-клиент Logger?

Нет, достаточно стандартной библиотеки. Пример на net/http полностью самодостаточен и не требует внешних зависимостей.

Как отправить вложенную структуру из Go?

Сериализуйте её в map[string]any или напрямую в JSON — поле mess принимает произвольный JSON.

Влияет ли логирование на производительность?

Отправляйте запрос в отдельной горутине (как в примере со slog.Handler), и логирование не будет блокировать обработку запросов.

05 / ДРУГИЕ ЯЗЫКИ
ГОТОВЫ К ПОДКЛЮЧЕНИЮ?

Поймайте следующее событие.

Откройте клиент, получите Consumer Key и отправьте первый лог из Go.

Начать работу