Skip to content

Instantly share code, notes, and snippets.

@zhulik
Created September 11, 2025 22:30
Show Gist options
  • Save zhulik/3564b07b7e5a5c2a7815bab3a6a073b0 to your computer and use it in GitHub Desktop.
Save zhulik/3564b07b7e5a5c2a7815bab3a6a073b0 to your computer and use it in GitHub Desktop.
How to use oops, slog and contexts together
package main
import (
"context"
"errors"
"log/slog"
"os"
"github.com/golang-cz/devslog"
"github.com/samber/oops"
slogctx "github.com/veqryn/slog-context"
)
func initLogger() {
h := slogctx.NewHandler(devslog.NewHandler(os.Stdout, nil), nil)
logger := slog.New(h)
slog.SetDefault(logger)
}
var ErrError = errors.New("some test error")
func doSomethingElse(ctx context.Context) error {
return oops.FromContext(ctx).
In("doSomethingElse").
Code("TEST_ERROR").
Public("this is a test error, no need to react on it").
Tags("test").
Hint("this is a test error").
Wrapf(ErrError, "test")
}
func doSomething(ctx context.Context) error {
return oops.Wrap(doSomethingElse(ctx))
}
func main() {
initLogger()
ctx := oops.WithBuilder(context.Background(),
oops.Tenant("tenant-uuid", map[string]any{"name": "Acme Corp"}).
User("user-uuid", map[string]any{"name": "John Doe"}),
)
ctx = oops.WithBuilder(ctx, oops.FromContext(ctx).With("foo", "bar"))
ctx = slogctx.Prepend(ctx, slog.String("appendKey", "appendValue"))
err := doSomething(ctx)
if err != nil {
slog.ErrorContext(ctx, "Something went wrong", "error", err)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment