Skip to content

Logging#

boxes and glue uses the slog package for structured logging. Until the slog package is part of Go's standard library, golang.org/x/exp/slog is used. Hopefully the standard library will have identical syntax and semantics.

Enable logging#

boxes and glue starts with logging disabled. It uses the bag.Logger as a logger. To enable logging, you must create a log handler:

myLogger := slog.New(slog.NewJSONHandler(os.Stdout, nil))
bag.SetLogger(myLogger)

for JSON output and

myLogger := slog.New(slog.NewTextHandler(os.Stdout, nil))
bag.SetLogger(myLogger)

for text output. The bag.SetLogger() function makes sure that the called libraries use the same logger.

Using the logger#

The logger can be used like this:

bag.Logger.Info("Read font file", "filename", myfontfile)

which outputs (in JSON)

{
    "time":"2023-07-16T16:42:59.619968+02:00",
    "level":"INFO",
    "msg":"Read font file",
    "filename":"MinionPro-Regular.otf"
}

You can use bag.Logger to set the default logger:

slog.SetDefault(bag.Logger)