A Sentry Handler for slog Go library.
See also:
- slog-multi:
slog.Handler
chaining, fanout, routing, failover, load balancing... - slog-formatter:
slog
attribute formatting - slog-sampling:
slog
sampling policy - slog-gin: Gin middleware for
slog
logger - slog-echo: Echo middleware for
slog
logger - slog-fiber: Fiber middleware for
slog
logger - slog-datadog: A
slog
handler forDatadog
- slog-rollbar: A
slog
handler forRollbar
- 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-loki: A
slog
handler forLoki
- 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
go get github.com/samber/slog-sentry
Compatibility: go >= 1.20.3
This library is v0 and follows SemVer strictly. On slog
final release (go 1.21), this library will go v1.
No breaking changes will be made to exported APIs before v1.0.0.
GoDoc: https://pkg.go.dev/github.com/samber/slog-sentry
type Option struct {
// log level (default: debug)
Level slog.Leveler
// sentry hub (default: current hub)
Hub *sentry.Hub
// optional: customize Sentry event builder
Converter Converter
}
The following attributes are interpreted by slogsentry.DefaultConverter
:
Atribute name | slog.Kind |
Underlying type |
---|---|---|
"dist" | string | |
"environment" | string | |
"event_id" | string | |
"platform" | string | |
"release" | string | |
"server_name" | string | |
"tags" | group (see below) | |
"transaction" | string | |
"user" | group (see below) | |
"error" | any | error |
"request" | any | *http.Request |
other attributes | * |
Other attributes will be injected in extra
Sentry field.
Users and tags must be of type slog.Group
. Eg:
slog.Group("user",
slog.String("id", "user-123"),
slog.String("username", "samber"),
slog.Time("created_at", time.Now()),
)
The Sentry agent is responsible for collecting context
and modules
.
import (
"github.com/getsentry/sentry-go"
slogsentry "github.com/samber/slog-sentry"
"golang.org/x/exp/slog"
)
func main() {
err := sentry.Init(sentry.ClientOptions{
Dsn: myDSN,
EnableTracing: false,
})
if err != nil {
log.Fatal(err)
}
defer sentry.Flush(2 * time.Second)
logger := slog.New(slogsentry.Option{Level: slog.LevelDebug}.NewSentryHandler())
logger = logger.
With("environment", "dev").
With("release", "v1.0.0")
// log error
logger.
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 request
logger.
With(
slog.Group("user",
slog.String("id", "user-123"),
slog.Time("created_at", time.Now()),
),
).
With("request", httpRequest)
With("status", 200).
Info("received http request")
}
- Ping me on twitter @samuelberthe (DMs, mentions, whatever :))
- Fork the project
- Fix open issues or request new features
Don't hesitate ;)
# Install some dev dependencies
make tools
# Run tests
make test
# or
make watch-test
Give a ⭐️ if this project helped you!
Copyright © 2023 Samuel Berthe.
This project is MIT licensed.