Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up

🚨 slog: Webhook handler

License

NotificationsYou must be signed in to change notification settings

samber/slog-webhook

Repository files navigation

tagGo VersionGoDocBuild StatusGo reportCoverageContributorsLicense

Awebhook Handler forslog Go library.

See also:

HTTP middlewares:

Loggers:

Log sinks:

🚀 Install

go get github.com/samber/slog-webhook/v2

Compatibility: go >= 1.21

No breaking changes will be made to exported APIs before v3.0.0.

💡 Usage

GoDoc:https://pkg.go.dev/github.com/samber/slog-webhook/v2

Handler options

typeOptionstruct {// log level (default: debug)Level     slog.Leveler// URLEndpointstringTimeout  time.Duration// default: 10s// optional: customize webhook event builderConverterConverter// optional: custom marshalerMarshalerfunc(vany) ([]byte,error)// optional: fetch attributes from contextAttrFromContext []func(ctx context.Context) []slog.Attr// optional: see slog.HandlerOptionsAddSourceboolReplaceAttrfunc(groups []string,a slog.Attr) slog.Attr}

Other global parameters:

slogwebhook.SourceKey="source"slogwebhook.ContextKey="extra"slogwebhook.ErrorKeys= []string{"error","err"}slogwebhook.RequestIgnoreHeaders=false

Supported attributes

The following attributes are interpreted byslogwebhook.DefaultConverter:

Atribute nameslog.KindUnderlying type
"user"group (see below)
"error"anyerror
"request"any*http.Request
other attributes*

Other attributes will be injected inextra field.

Users must be of typeslog.Group. Eg:

slog.Group("user",slog.String("id","user-123"),slog.String("username","samber"),slog.Time("created_at",time.Now()),)

Example

import ("fmt""net/http""time"slogwebhook"github.com/samber/slog-webhook/v2""log/slog")funcmain() {url:="https://webhook.site/xxxxxx"logger:=slog.New(slogwebhook.Option{Level:slog.LevelDebug,Endpoint:url}.NewWebhookHandler())logger=logger.With("release","v1.0.0")req,_:=http.NewRequest(http.MethodGet,"https://api.screeb.app",nil)req.Header.Set("Content-Type","application/json")req.Header.Set("X-TOKEN","1234567890")logger.With(slog.Group("user",slog.String("id","user-123"),slog.Time("created_at",time.Now()),      ),    ).With("request",req).With("error",fmt.Errorf("an error")).Error("a message")}

Output:

{"error": {"error":"an error","kind":"*errors.errorString","stack":null  },"extra": {"release":"v1.0.0"  },"level":"ERROR","logger":"samber/slog-webhook","message":"a message","request": {"headers": {"Content-Type":"application/json","X-Token":"1234567890"    },"host":"api.screeb.app","method":"GET","url": {"fragment":"","host":"api.screeb.app","path":"","query": {},"raw_query":"","scheme":"https","url":"https://api.screeb.app"    }  },"timestamp":"2023-04-10T14:00:0.000000","user": {"id":"user-123","created_at":"2023-04-10T14:00:0.000000"  }}

Tracing

Import the samber/slog-otel library.

import (slogwebhook"github.com/samber/slog-webhook"slogotel"github.com/samber/slog-otel""go.opentelemetry.io/otel/sdk/trace")funcmain() {tp:=trace.NewTracerProvider(trace.WithSampler(trace.AlwaysSample()),)tracer:=tp.Tracer("hello/world")ctx,span:=tracer.Start(context.Background(),"foo")deferspan.End()span.AddEvent("bar")logger:=slog.New(slogwebhook.Option{// ...AttrFromContext: []func(ctx context.Context) []slog.Attr{slogotel.ExtractOtelAttrFromContext([]string{"tracing"},"trace_id","span_id"),},}.NewWebhookHandler(),)logger.ErrorContext(ctx,"a message")}

🤝 Contributing

Don't hesitate ;)

# Install some dev dependenciesmake tools# Run testsmaketest# ormake watch-test

👤 Contributors

Contributors

💫 Show your support

Give a ⭐️ if this project helped you!

GitHub Sponsors

📝 License

Copyright © 2023Samuel Berthe.

This project isMIT licensed.


[8]ページ先頭

©2009-2025 Movatter.jp