Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork2
samber/slog-webhook
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
Awebhook Handler forslog Go library.
Sponsored by:

See also:
- slog-multi:
slog.Handler
chaining, fanout, routing, failover, load balancing... - slog-formatter:
slog
attribute formatting - slog-sampling:
slog
sampling policy - slog-mock:
slog.Handler
for test purposes
HTTP middlewares:
- slog-gin: Gin middleware for
slog
logger - slog-echo: Echo middleware for
slog
logger - slog-fiber: Fiber middleware for
slog
logger - slog-chi: Chi middleware for
slog
logger - slog-http:
net/http
middleware forslog
logger
Loggers:
- slog-zap: A
slog
handler forZap
- slog-zerolog: A
slog
handler forZerolog
- slog-logrus: A
slog
handler forLogrus
Log sinks:
- slog-datadog: A
slog
handler forDatadog
- slog-betterstack: A
slog
handler forBetterstack
- slog-rollbar: A
slog
handler forRollbar
- slog-loki: A
slog
handler forLoki
- slog-sentry: A
slog
handler forSentry
- slog-syslog: A
slog
handler forSyslog
- slog-logstash: A
slog
handler forLogstash
- slog-fluentd: A
slog
handler forFluentd
- slog-graylog: A
slog
handler forGraylog
- slog-quickwit: A
slog
handler forQuickwit
- slog-slack: A
slog
handler forSlack
- slog-telegram: A
slog
handler forTelegram
- slog-mattermost: A
slog
handler forMattermost
- slog-microsoft-teams: A
slog
handler forMicrosoft Teams
- slog-webhook: A
slog
handler forWebhook
- slog-kafka: A
slog
handler forKafka
- slog-nats: A
slog
handler forNATS
- slog-parquet: A
slog
handler forParquet
+Object Storage
- slog-channel: A
slog
handler for Go channels
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.
GoDoc:https://pkg.go.dev/github.com/samber/slog-webhook/v2
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
The following attributes are interpreted byslogwebhook.DefaultConverter
:
Atribute name | slog.Kind | Underlying type |
---|---|---|
"user" | group (see below) | |
"error" | any | error |
"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()),)
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" }}
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")}
- Ping me on twitter@samuelberthe (DMs, mentions, whatever :))
- Fork theproject
- Fixopen issues or request new features
Don't hesitate ;)
# Install some dev dependenciesmake tools# Run testsmaketest# ormake watch-test
Give a ⭐️ if this project helped you!
Copyright © 2023Samuel Berthe.
This project isMIT licensed.
About
🚨 slog: Webhook handler
Topics
Resources
License
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Sponsor this project
Uh oh!
There was an error while loading.Please reload this page.
Uh oh!
There was an error while loading.Please reload this page.
Contributors2
Uh oh!
There was an error while loading.Please reload this page.