basalttrail ⌥

Начало работы

Установка

Для basalttrail нужен Go 1.22+. Добавьте библиотеку в проект:

go get github.com/basalttrail/basalttrail@latest

Первые шаги

Вот полная программа, которая использует basalttrail.

package main

import (
	"context"
	"fmt"
	"log"

	"github.com/basalttrail/basalttrail"
)

func main() {
	ctx := context.Background()

	l, err := basalttrail.New(basalttrail.Options{
		Level:  "info",
		Format: "json",
	})
	if err != nil {
		log.Fatal(err)
	}
	defer l.Close()

	if err := l.Info(ctx, "сервер запущен"); err != nil {
		log.Fatal(err)
	}

	ok, err := l.SetLevel(ctx, "debug")
	if err != nil {
		log.Fatal(err)
	}
	fmt.Println(ok)
}

Поля

У каждой записи есть время, уровень и сообщение, плюс любые добавленные поля. Предпочитайте поля форматированию строк: по ним проще искать, и они дешевле.

Уровни

Записи ниже заданного уровня отбрасываются до кодирования полей. Меняйте уровень на лету через set_level(), например из служебного эндпоинта.

Дочерние логгеры

with() возвращает логгер, добавляющий поля к каждой записи. Создавайте такой на каждый запрос с его id и передавайте дальше.

Дочерние логгеры делят вывод и уровень с родителем.

Сэмплирование

Под нагрузкой одно и то же сообщение может писаться тысячи раз в секунду. Сэмплирование сохраняет первые записи каждой секунды, а дальше — одну из N, так что логи остаются читаемыми и дешёвыми.

Вывод

По умолчанию логи идут в стандартный вывод — этого ждут контейнерные платформы. При необходимости пишите в файл или сразу в несколько мест.