While attempting to extend the slog package in many different ways, I kept coming back to this idea that, at some point, I have to write a slog.Handler. I don’t have a need for high performance, and I just need an easy way to extend my logger to do additional things at the same time as logging. That’s why I created slogevent. This Go package makes extending slog as simple as writing a function that handles log entries. Here’s how you would write your custom log handling with slogevent:

func EventHandler(ctx context.Context, e slogevent.Event) {
    if e.Level >= slog.LevelError {
        attrs, _ := json.Marshal(e.Attrs)
        SoundTheAlarm(e.Message, string(attrs))
    }
}

Then you hook into slog like this:

slogLogger := slog.New(slogevent.NewHandler(EventHandler, slog.NewTextHandler(os.Stderr, nil)))

Try it out here!