Начало работы
Установка
Для 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, так что логи остаются читаемыми и дешёвыми.
Вывод
По умолчанию логи идут в стандартный вывод — этого ждут контейнерные платформы. При необходимости пишите в файл или сразу в несколько мест.