Стандартната библиотека на Го предоставя прости пособия за извеждане на съобщения относно работата на програмите. Пакетът log1 ни дава възможност да извеждаме такива съобщения в свободен вид, а пакетът log/slog в структуриран вид.
import (
"bytes"
"fmt"
"log"
"log/slog"
"os"
)
func main() {
Просто извикваме функции като Println от пакета log, който е
предварително настроен да извежда съобщения в os.Stderr.
Допълнителните функции като Fatal* или Panic* ще прекратят
програмата след като изведат съобщения в предварително настроения
дневник.
log.Println("стандартния отчетник")
Отчетниците1 могат да бъдат настройвани чрез флагове,
определящи изгледа на записите. На стандартния отчетник по подразбиране
са му включени флаговете log.Ldate и log.Ltime. Можем да променим
флаговете, така че да се извежда времето с точност до микросекунда.
log.SetFlags(log.LstdFlags | log.Lmicroseconds)
log.Println("с микросекунди")
log също може да извежда името на файла и реда, където е извикана
отчитащата функция.
log.SetFlags(log.LstdFlags | log.Lshortfile)
log.Println("с файл и ред")
Може да ви е от полза да създадете приспособен отчетник и да го подавате наоколо. Когато създаваме нов отчетник, можем да да настроим представка, с която да се отличават неговите записи от тези на други отчетници.
моят := log.New(os.Stdout, "мой:", log.LstdFlags)
моят.Println("от мен")
Можем да задаваме представка на вече съществуващи отчетници (включително
и на стандартния) с метода SetPrefix.
моят.SetPrefix("моят:")
моят.Println("от моя")
Отчетниците могат да бъдат създадени с целеви изход; всеки склад,
осъществяващ взаимодействието io.Writer, е подходящ.
var buf bytes.Buffer
buflog := log.New(&buf, "buf:", log.LstdFlags)
Това извиквне пише изхода си в buf.
buflog.Println("здрасти")
А това извикване извежда складираните в buf записи на стандартния
изход.
fmt.Print("от 'buflog':", buf.String())
Пакетът slog предоставя структурирано извеждане на записите.
Например лесно извежда записите във вид на JSON.
jsonHandler := slog.NewJSONHandler(os.Stderr, nil)
myslog := slog.New(jsonHandler)
myslog.Info("хей, здравей")
Освен самия отчетен запис, изходът от slog може да съдържа произволен
брой двойки ключ=запис.
myslog.Info("здрасти пак", "ключ", "стойност",
"възраст", 25)
}
Примерен изход: датата и времето зависят от това, кога е бил пуснат примера.
$ go run logging.go
2026/05/18 12:30:56 стандартния отчетник
2026/05/18 12:30:56.665801 с микросекунди
2026/05/18 12:30:56 logging.go:45: с файл и ред
мой:2026/05/18 12:30:56 от мен
моят:2026/05/18 12:30:56 от моя
от 'buflog':buf:2026/05/18 12:30:56 здрасти
Тези записи се пренасят на нов ред с цел по-добро представяне на сайта; в действителност се извежда по един запис на ред.
{"time":"2026-05-18T12:30:56.665856473+03:00",
"level":"INFO","msg":"хей, здравей"}
{"time":"2026-05-18T12:30:56.665879347+03:00",
"level":"INFO","msg":"здрасти пак",
"ключ":"стойност","възраст":25}
Следващ пример: Клиент за HTTP.