Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork1
samber/slog-datadog
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
ADatadog 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-datadog/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-datadog/v2
typeOptionstruct {// log level (default: debug)Level slog.Leveler// datadog endpointClient*datadog.APIClientContext context.ContextTimeout time.Duration// default: 10s// source parametersServicestringHostnamestringGlobalTagsmap[string]string// optional: customize Datadog message 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}
Attributes will be injected in log payload.
Other global parameters:
slogdatadog.SourceKey="source"slogdatadog.ErrorKeys= []string{"error","err"}
import ("github.com/DataDog/datadog-api-client-go/v2/api/datadog"slogdatadog"github.com/samber/slog-datadog/v2""log/slog")funcnewDatadogClient(endpointstring,apiKeystring) (*datadog.APIClient, context.Context) {ctx:=datadog.NewDefaultContext(context.Background())ctx=context.WithValue(ctx,datadog.ContextAPIKeys,map[string]datadog.APIKey{"apiKeyAuth": {Key:apiKey}},)ctx=context.WithValue(ctx,datadog.ContextServerVariables,map[string]string{"site":endpoint},)configuration:=datadog.NewConfiguration()apiClient:=datadog.NewAPIClient(configuration)returnapiClient,ctx}funcmain() {host:="1.2.3.4"service:="api"endpoint:=slogdatadog.DatadogHostEUapiKey:="xxx"apiClient,ctx:=newDatadogClient(endpoint,apiKey)logger:=slog.New(slogdatadog.Option{Level:slog.LevelDebug,Client:apiClient,Context:ctx,Timeout:5*time.Second,Hostname:host,Service:service}.NewDatadogHandler())logger=logger.With("environment","dev").With("release","v1.0.0")// log errorlogger.With("category","sql").With("query.statement","SELECT COUNT(*) FROM users;").With("query.duration",1*time.Second).With("error",fmt.Errorf("could not count users")).Error("caramba!")// log user signuplogger.With(slog.Group("user",slog.String("id","user-123"),slog.Time("created_at",time.Now()),),).Info("user registration")}
Import the samber/slog-otel library.
import (slogdatadog"github.com/samber/slog-datadog"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(slogdatadog.Option{// ...AttrFromContext: []func(ctx context.Context) []slog.Attr{slogotel.ExtractOtelAttrFromContext([]string{"tracing"},"trace_id","span_id"),},}.NewDatadogHandler(),)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: Datadog 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.
Contributors3
Uh oh!
There was an error while loading.Please reload this page.