Created
September 11, 2025 22:30
-
-
Save zhulik/3564b07b7e5a5c2a7815bab3a6a073b0 to your computer and use it in GitHub Desktop.
How to use oops, slog and contexts together
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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