go get github.com/willabides/actionslog
actionslog's creation was blogged here
actionslog provides a wrapper around a Handler for Go's log/slog that outputs logs as GitHub Actions workflow commands that will cause the logs to show up in the GitHub UI -- optionally with links to the source code.
It can wrap any slog.Handler, but it also provides human.Handler which is meant to be a little easier for human's to
read. human.Handler's output is roughly <message>\n <vars as yaml>
, so output
for logger.Info("hello", slog.String("object", "world"), slog.Any("list", []string{"a", "b", "c"))
would look like:
hello
object: world
list:
- a
- b
- c
actionslog.Wrapper implements slog.Handler from "log/slog" when built with go 1.21 or higher. When built with go earlier versions that predate "log/slog", it implements slog.Handler from "golang.org/x/exp/slog".
package main
import (
"log/slog"
"github.com/willabides/actionslog"
"github.com/willabides/actionslog/human"
)
func main() {
logger := slog.New(&actionslog.Wrapper{
Handler: human.Handler{}.WithOutput
})
logger.Info("hello", slog.String("object", "world"))
}
This is what the output of ./internal/example looks like in the GitHub UI.