- Add missing TracesSampler fields for SamplingContext by @giortzisg in #1259
- Add support for Echo v5 by @Scorfly in #1183
- Add OTLP trace exporter via new otel/otlp sub-module by @giortzisg in #1229
- sentryotlp.NewTraceExporter sends OTel spans directly to Sentry's OTLP endpoint.
- sentryotel.NewOtelIntegration links Sentry errors, logs, and metrics to the active OTel trace. Works with both direct-to-Sentry and collector-based setups.
- NewSentrySpanProcessor, NewSentryPropagator, and SentrySpanMap are deprecated and will be removed in 0.47.0. To Migrate use
sentryotlp.NewTraceExporterinstead:
// Before sentry.Init(sentry.ClientOptions{Dsn: dsn, EnableTracing: true, TracesSampleRate: 1.0}) tp := sdktrace.NewTracerProvider( sdktrace.WithSpanProcessor(sentryotel.NewSentrySpanProcessor()), ) otel.SetTextMapPropagator(sentryotel.NewSentryPropagator()) otel.SetTracerProvider(tp) // After: sentry.Init(sentry.ClientOptions{ Dsn: dsn, EnableTracing: true, TracesSampleRate: 1.0, Integrations: func(i []sentry.Integration) []sentry.Integration { return append(i, sentryotel.NewOtelIntegration()) }, }) exporter, _ := sentryotlp.NewTraceExporter(ctx, dsn) tp := sdktrace.NewTracerProvider(sdktrace.WithBatcher(exporter)) otel.SetTracerProvider(tp)
- Add IsSensitiveHeader helper to easily distinguish which headers to scrub for PII. by @giortzisg in #1239
- (ci) Update validate-pr action to remove draft enforcement by @stephanie-anderson in #1237
- (fiber) Use UserContext for transaction to enable OTel trace linking by @giortzisg in #1252
- Race condition when getting envelope identifier by @giortzisg in #1250
- Bump OpenTelemetry SDK to 1.40.0 by @giortzisg in #1243
- Bump changelog-preview.yml from 2.24.1 to 2.25.2 by @dependabot in #1247
- Bump getsentry/craft from 2.24.1 to 2.25.2 by @dependabot in #1248
- Bump codecov/codecov-action from 5.5.2 to 6.0.0 by @dependabot in #1245
- Bump actions/create-github-app-token from 2.2.1 to 3.0.0 by @dependabot in #1246
- Bump actions/setup-go from 6.3.0 to 6.4.0 by @dependabot in #1244
- Update validate-pr workflow by @stephanie-anderson in #1242
- Add PR validation workflow by @stephanie-anderson in #1234
Note
The v0.44.0 is missing due to a technical issue and had to be released again as v0.44.1
- Add RemoveAttribute api on the scope. by @giortzisg in #1224
- Deprecate
Scope.SetExtra,Scope.SetExtras, andScope.RemoveExtrain favor ofScope.SetAttributesandScope.RemoveAttributeby @giortzisg in #1224- The recommended migration path is to use
SetAttributesto attach values to logs and metrics. Note that attributes do not appear on error events; if you only capture errors, useSetTagorSetContextinstead. - Before:
scope.SetExtra("key.string", "str") scope.SetExtra("key.int", 42)
- After (for error events) — use tags and contexts:
scope.SetTag("key.string", "str") scope.SetContext("my_data", sentry.Context{"key.int": 42})
- After (for logs and metrics) — use attributes:
scope.SetAttributes( attribute.String("key.string", "str"), attribute.Int("key.int", 42), )
- The recommended migration path is to use
- Add support for homogenous arrays by @giortzisg in #1203
- Add support for client reports by @giortzisg in #1192
- Add org id propagation in sentry_baggage by @giortzisg in #1210
- Add OrgID and StrictTraceContinuation client options. by @giortzisg in #1210
- Add the option to set attributes on the scope by @giortzisg in #1208
- (serialization) Pre-serialize mutable event fields to prevent race panics by @giortzisg in #1214
- Use HEROKU_BUILD_COMMIT with HEROKU_SLUG_COMMIT as fallback by @ericapisani in #1220
- Add AGENTS.md and testing guidelines by @giortzisg in #1216
- Add dotagents configuration by @giortzisg in #1211
- Bump github.com/buger/jsonparser from 1.1.1 to 1.1.2 in /zerolog by @dependabot in #1231
- Bump github.com/gofiber/fiber/v2 from 2.52.11 to 2.52.12 in /fiber by @dependabot in #1209
- Pin GitHub Actions to full-length commit SHAs by @joshuarli in #1230
- Bump getsentry/craft to 2.24.1 by @giortzisg in #1225
- Handle independent go module versions for integrations by @giortzisg in #1217
- Add support for go 1.26 by @giortzisg in #1193
- bump minimum supported go version to 1.24
- change type signature of attributes for Logs and Metrics. by @giortzisg in #1205
- users are not supposed to modify Attributes directly on the Log/Metric itself, but this is still is a breaking change on the type.
- Send uint64 overflowing attributes as numbers. by @giortzisg in #1198
- The SDK was converting overflowing uint64 attributes to strings for slog and logrus integrations. To eliminate double types for these attributes, the SDK now sends the overflowing attribute as is, and lets the server handle the overflow appropriately.
- It is expected that overflowing unsigned integers would now get dropped, instead of converted to strings.
- Add zap logging integration by @giortzisg in #1184
- Log specific message for RequestEntityTooLarge by @giortzisg in #1185
- Improve otel span map cleanup performance by @giortzisg in #1200
- Ensure correct signal delivery on multi-client setups by @giortzisg in #1190
- Bump golang.org/x/crypto to 0.48.0 by @giortzisg in #1196
- Use go1.24.0 by @giortzisg in #1195
- Bump github.com/gofiber/fiber/v2 from 2.52.9 to 2.52.11 in /fiber by @dependabot in #1191
- Bump getsentry/craft from 2.19.0 to 2.20.1 by @dependabot in #1187
- Add omitzero and remove custom serialization by @giortzisg in #1197
- Rename Telemetry Processor components by @giortzisg in #1186
- refactor Telemetry Processor to use TelemetryItem instead of ItemConvertible by @giortzisg in #1180
- remove ToEnvelopeItem from single log items
- rename TelemetryBuffer to Telemetry Processor to adhere to spec
- remove unsed ToEnvelopeItem(dsn) from Event.
- Add metric support by @aldy505 in #1151
- support for three metric methods (counter, gauge, distribution)
- custom metric units
- unexport batchlogger
- Fix changelog-preview permissions by @BYK in #1181
- Switch from action-prepare-release to Craft by @BYK in #1167
- (repo) Add Claude Code settings with basic permissions by @philipphofmann in #1175
- Update release and changelog-preview workflows by @giortzisg in #1177
- Bump echo to 4.10.1 by @giortzisg in #1174
The Sentry SDK team is happy to announce the immediate availability of Sentry Go SDK v0.41.0.
- Add HTTP client integration for distributed tracing via
sentryhttpclientpackage (#876)- Provides an
http.RoundTripperimplementation that automatically creates spans for outgoing HTTP requests - Supports trace propagation targets configuration via
WithTracePropagationTargetsoption - Example usage:
import sentryhttpclient "github.com/getsentry/sentry-go/httpclient" roundTripper := sentryhttpclient.NewSentryRoundTripper(nil) client := &http.Client{ Transport: roundTripper, }
- Provides an
- Add
ClientOptions.PropagateTraceparentoption to control W3Ctraceparentheader propagation in outgoing HTTP requests (#1161) - Add
SpanIDfield to structured logs (#1169)
The Sentry SDK team is happy to announce the immediate availability of Sentry Go SDK v0.40.0.
- Disable
DisableTelemetryBufferflag and noop Telemetry Buffer, to prevent a panic at runtime (#1149).
The Sentry SDK team is happy to announce the immediate availability of Sentry Go SDK v0.39.0.
- Drop events from the telemetry buffer when rate-limited or transport is full, allowing the buffer queue to empty itself under load (#1138).
- Fix scheduler's
hasWork()method to check if buffers are ready to flush. The previous implementation was causing CPU spikes (#1143).
-
Introduce a new async envelope transport and telemetry buffer to prioritize and batch events (#1094, #1093, #1107).
- Advantages:
- Prioritized, per-category buffers (errors, transactions, logs, check-ins) reduce starvation and improve resilience under load
- Batching for high-volume logs (up to 100 items or 5s) cuts network overhead
- Bounded memory with eviction policies
- Improved flush behavior with context-aware flushing
- Advantages:
-
Add
ClientOptions.DisableTelemetryBufferto opt out and fall back to the legacy transport layer (HTTPTransport/HTTPSyncTransport).err := sentry.Init(sentry.ClientOptions{ Dsn: "__DSN__", DisableTelemetryBuffer: true, // fallback to legacy transport })
- If a custom
Transportis provided, the SDK automatically disables the telemetry buffer and uses the legacy transport for compatibility.
The Sentry SDK team is happy to announce the immediate availability of Sentry Go SDK v0.37.0.
- Behavioral change for the
TraceIgnoreStatusCodesoption. The option now defaults to ignoring 404 status codes (#1122).
- Add
sentry.originattribute to structured logs to identify log origin forslogandlogrusintegrations (auto.log.slog,auto.log.logrus) (#1121).
- Fix
slogevent handler to use the initial context, ensuring events use the correct hub/span when the emission context lacks one (#1133). - Improve exception chain processing by checking pointer values when tracking visited errors, avoiding instability for certain wrapped errors (#1132).
- Bump
golang.org/x/netto v0.38.0 (#1126).
The Sentry SDK team is happy to announce the immediate availability of Sentry Go SDK v0.36.2.
- Fix context propagation for logs to ensure logger instances correctly inherit span and hub information from their creation context (#1118)
- Logs now properly propagate trace context from the logger's original context, even when emitted in a different context
- The logger will first check the emission context, then fall back to its creation context, and finally to the current hub
The Sentry SDK team is happy to announce the immediate availability of Sentry Go SDK v0.36.1.
- Prevent panic when converting error chains containing non-comparable error types by using a safe fallback for visited detection in exception conversion (#1113)
The Sentry SDK team is happy to announce the immediate availability of Sentry Go SDK v0.36.0.
-
Behavioral change for the
MaxBreadcrumbsclient option. Removed the hard limit of 100 breadcrumbs, allowing users to set a larger limit and also changed the default limit from 30 to 100 (#1106)) -
The changes to error handling (#1075) will affect issue grouping. It is expected that any wrapped and complex errors will be grouped under a new issue group.
-
Add support for improved issue grouping with enhanced error chain handling (#1075)
The SDK now provides better handling of complex error scenarios, particularly when dealing with multiple related errors or error chains. This feature automatically detects and properly structures errors created with Go's
errors.Join()function and other multi-error patterns.// Multiple errors are now properly grouped and displayed in Sentry err1 := errors.New("err1") err2 := errors.New("err2") combinedErr := errors.Join(err1, err2) // When captured, these will be shown as related exceptions in Sentry sentry.CaptureException(combinedErr)
-
Add
TraceIgnoreStatusCodesoption to allow filtering of HTTP transactions based on status codes (#1089)- Configure which HTTP status codes should not be traced by providing single codes or ranges
- Example:
TraceIgnoreStatusCodes: [][]int{{404}, {500, 599}}ignores 404 and server errors 500-599
- Fix logs being incorrectly filtered by
BeforeSendcallback (#1109)- Logs now bypass the
processEventmethod and are sent directly to the transport - This ensures logs are only filtered by
BeforeSendLog, not by the error/messageBeforeSendcallback
- Logs now bypass the
- Add support for Go 1.25 and drop support for Go 1.22 (#1103)
The Sentry SDK team is happy to announce the immediate availability of Sentry Go SDK v0.35.3.
- Add missing rate limit categories (#1082)
The Sentry SDK team is happy to announce the immediate availability of Sentry Go SDK v0.35.2.
- Fix OpenTelemetry spans being created as transactions instead of child spans (#1073)
- Add
MockTransportto test clients for improved testing (#1071)
The Sentry SDK team is happy to announce the immediate availability of Sentry Go SDK v0.35.1.
- Fix race conditions when accessing the scope during logging operations (#1050)
- Fix nil pointer dereference with malformed URLs when tracing is enabled in
fasthttpandfiberintegrations (#1055)
- Bump
github.com/gofiber/fiber/v2from 2.52.5 to 2.52.9 in/fiber(#1067)
The Sentry SDK team is happy to announce the immediate availability of Sentry Go SDK v0.35.0.
- Changes to the logging API (#1046)
The logging API now supports a fluent interface for structured logging with attributes:
// usage before
logger := sentry.NewLogger(ctx)
// attributes weren't being set permanently
logger.SetAttributes(
attribute.String("version", "1.0.0"),
)
logger.Infof(ctx, "Message with parameters %d and %d", 1, 2)
// new behavior
ctx := context.Background()
logger := sentry.NewLogger(ctx)
// Set permanent attributes on the logger
logger.SetAttributes(
attribute.String("version", "1.0.0"),
)
// Chain attributes on individual log entries
logger.Info().
String("key.string", "value").
Int("key.int", 42).
Bool("key.bool", true).
Emitf("Message with parameters %d and %d", 1, 2)- Correctly serialize
FailureIssueThresholdandRecoveryThresholdonto check-in payloads (#1060)
The Sentry SDK team is happy to announce the immediate availability of Sentry Go SDK v0.34.1.
- Allow flush to be used multiple times without issues, particularly for the batch logger (#1051)
- Fix race condition in
Scope.GetSpan()method by adding proper mutex locking (#1044) - Guard transport on
Close()to prevent panic when called multiple times (#1044)
The Sentry SDK team is happy to announce the immediate availability of Sentry Go SDK v0.34.0.
- Logrus structured logging support replaces the
sentrylogrus.Hooksignature from a*Hookto an interface.
var hook *sentrylogrus.Hook
hook = sentrylogrus.New(
// ... your setup
)
// should change the definition to
var hook sentrylogrus.Hook
hook = sentrylogrus.New(
// ... your setup
)ctx := context.Background()
handler := sentryslog.Option{
EventLevel: []slog.Level{slog.LevelError, sentryslog.LevelFatal}, // Only Error and Fatal as events
LogLevel: []slog.Level{slog.LevelWarn, slog.LevelInfo}, // Only Warn and Info as logs
}.NewSentryHandler(ctx)
logger := slog.New(handler)
logger.Info("hello"))logHook, _ := sentrylogrus.NewLogHook(
[]logrus.Level{logrus.InfoLevel, logrus.WarnLevel},
sentry.ClientOptions{
Dsn: "your-dsn",
EnableLogs: true, // Required for log entries
})
defer logHook.Flush(5 * time.Secod)
logrus.RegisterExitHandler(func() {
logHook.Flush(5 * time.Second)
})
logger := logrus.New()
logger.AddHook(logHook)
logger.Infof("hello")- Add support for flushing events with context using
FlushWithContext(). (#935)
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
if !sentry.FlushWithContext(ctx) {
// Handle timeout or cancellation
}- Add support for custom fingerprints in slog integration. (#1039)
- Slog structured logging support replaces
Leveloption withEventLevelandLogLeveloptions, for specifying fine-grained levels for capturing events and logs.
handler := sentryslog.Option{
EventLevel: []slog.Level{slog.LevelWarn, slog.LevelError, sentryslog.LevelFatal},
LogLevel: []slog.Level{slog.LevelDebug, slog.LevelInfo, slog.LevelWarn, slog.LevelError, sentryslog.LevelFatal},
}.NewSentryHandler(ctx)- Logrus structured logging support replaces
NewandNewFromClientfunctions toNewEventHook,NewEventHookFromClient, to match the newly addedNewLogHookfunctions, and specify the hook type being created each time.
logHook, err := sentrylogrus.NewLogHook(
[]logrus.Level{logrus.InfoLevel},
sentry.ClientOptions{})
eventHook, err := sentrylogrus.NewEventHook([]logrus.Level{
logrus.ErrorLevel,
logrus.FatalLevel,
logrus.PanicLevel,
}, sentry.ClientOptions{})- Fix issue where
ContinueTrace()would panic whensentry-traceheader does not exist. (#1026) - Fix incorrect log level signature in structured logging. (#1034)
- Remove
sentry.originattribute from Sentry logger to prevent confusion in spans. (#1038) - Don't gate user information behind
SendDefaultPIIflag for logs. (#1032)
- Add more sensitive HTTP headers to the default list of headers that are scrubbed by default. (#1008)
The Sentry SDK team is happy to announce the immediate availability of Sentry Go SDK v0.33.0.
- Rename the internal
LoggertoDebugLogger. This feature was only used when you setDebug: Truein yoursentry.Init()call. If you haven't used the Logger directly, no changes are necessary. (#1012)
-
Add support for Structured Logging. (#1010)
logger := sentry.NewLogger(ctx) logger.Info(ctx, "Hello, Logs!")
You can learn more about Sentry Logs on our docs and the examples.
-
Add new attributes APIs, which are currently only exposed on logs. (#1007)
- Do not push a new scope on
StartSpan. (#1013) - Fix an issue where the propagated smapling decision wasn't used. (#995)
- [Otel] Prefer
httpRouteoverhttpTargetfor span descriptions. (#1002)
- Update
github.com/stretchr/testifyto v1.8.4. (#988)
The Sentry SDK team is happy to announce the immediate availability of Sentry Go SDK v0.32.0.
- Bump the minimum Go version to 1.22. The supported versions are 1.22, 1.23 and 1.24. (#967)
- Setting any values on
span.Extrahas no effect anymore. UseSetData(name string, value interface{})instead. (#864)
- Add a
MockTransportandMockScope. (#972)
- Fix writing
*http.Requestin the Logrus JSONFormatter. (#955)
- Transaction
dataattributes are now seralized as trace context data attributes, allowing you to query these attributes in the Trace Explorer.
The Sentry SDK team is happy to announce the immediate availability of Sentry Go SDK v0.31.1.
- Correct wrong module name for
sentry-go/logrus(#950)
The Sentry SDK team is happy to announce the immediate availability of Sentry Go SDK v0.31.0.
-
Remove support for metrics. Read more about the end of the Metrics beta here. (#914)
-
Remove support for profiling. (#915)
-
Remove
Segmentfield from theUserstruct. This field is no longer used in the Sentry product. (#928) -
Every integration is now a separate module, reducing the binary size and number of dependencies. Once you update
sentry-goto latest version, you'll need togo getthe integration you want to use. For example, if you want to use theechointegration, you'll need to rungo get github.com/getsentry/sentry-go/echo(#919).
Add the ability to override hub in context for integrations that use custom context. (#931)
- Add
HubProviderHook forsentrylogrus, enabling dynamic Sentry hub allocation for each log entry or goroutine. (#936)
This change enhances compatibility with Sentry's recommendation of using separate hubs per goroutine. To ensure a separate Sentry hub for each goroutine, configure the HubProvider like this:
hook, err := sentrylogrus.New(nil, sentry.ClientOptions{})
if err != nil {
log.Fatalf("Failed to initialize Sentry hook: %v", err)
}
// Set a custom HubProvider to generate a new hub for each goroutine or log entry
hook.SetHubProvider(func() *sentry.Hub {
client, _ := sentry.NewClient(sentry.ClientOptions{})
return sentry.NewHub(client, sentry.NewScope())
})
logrus.AddHook(hook)- Add support for closing worker goroutines started by the
HTTPTranportto prevent goroutine leaks. (#894)
client, _ := sentry.NewClient()
defer client.Close()Worker can be also closed by calling Close() method on the HTTPTransport instance. Close should be called after Flush and before terminating the program otherwise some events may be lost.
transport := sentry.NewHTTPTransport()
defer transport.Close()- Bump gin-gonic/gin to v1.9.1. (#946)
The Sentry SDK team is happy to announce the immediate availability of Sentry Go SDK v0.30.0.
- Add
sentryzerologintegration (#857) - Add
sentryslogintegration (#865) - Always set Mechanism Type to generic (#896)
- Prevent panic in
fasthttpandfiberintegration in case a malformed URL has to be parsed (#912)
Drop support for Go 1.18, 1.19 and 1.20. The currently supported Go versions are the last 3 stable releases: 1.23, 1.22 and 1.21.
The Sentry SDK team is happy to announce the immediate availability of Sentry Go SDK v0.29.1.
- Correlate errors to the current trace (#886)
- Set the trace context when the transaction finishes (#888)
- Update the
sentrynegroniintegration to use the latest (v3.1.1) version of Negroni (#885)
The Sentry SDK team is happy to announce the immediate availability of Sentry Go SDK v0.29.0.
- Remove the
sentrymartiniintegration (#861) - The
WrapResponseWriterhas been moved from thesentryhttppackage to theinternal/httputilspackage. If you've imported it previosuly, you'll need to copy the implementation in your project. (#871)
-
Add new convenience methods to continue a trace and propagate tracing headers for error-only use cases. (#862)
If you are not using one of our integrations, you can manually continue an incoming trace by using
sentry.ContinueTrace()by providing thesentry-traceandbaggageheader received from a downstream SDK.hub := sentry.CurrentHub() sentry.ContinueTrace(hub, r.Header.Get(sentry.SentryTraceHeader), r.Header.Get(sentry.SentryBaggageHeader)),
You can use
hub.GetTraceparent()andhub.GetBaggage()to fetch the necessary header values for outgoing HTTP requests.hub := sentry.GetHubFromContext(ctx) req, _ := http.NewRequest("GET", "http://localhost:3000", nil) req.Header.Add(sentry.SentryTraceHeader, hub.GetTraceparent()) req.Header.Add(sentry.SentryBaggageHeader, hub.GetBaggage())
- Initialize
HTTPTransport.limitifnil(#844) - Fix
sentry.StartTransaction()returning a transaction with an outdated context on existing transactions (#854) - Treat
Proxy-Authorizationas a sensitive header (#859) - Add support for the
http.Hijackerinterface to thesentrynegronipackage (#871) - Go version >= 1.23: Use value from
http.Request.Patternfor HTTP transaction names when usingsentryhttp&sentrynegroni(#875) - Go version >= 1.21: Fix closure functions name grouping (#877)
- Collect
spanorigins (#849)
The Sentry SDK team is happy to announce the immediate availability of Sentry Go SDK v0.28.1.
- Implement
http.ResponseWriterto hook into various parts of the response process (#837)
The Sentry SDK team is happy to announce the immediate availability of Sentry Go SDK v0.28.0.
- Add a
Fiberperformance tracing & error reporting integration (#795) - Add performance tracing to the
Echointegration (#722) - Add performance tracing to the
FastHTTPintegration (#732) - Add performance tracing to the
Irisintegration (#809) - Add performance tracing to the
Negroniintegration (#808) - Add
FailureIssueThreshold&RecoveryThresholdtoMonitorConfig(#775) - Use
errors.Unwrap()to create exception groups (#792) - Add support for matching on strings for
ClientOptions.IgnoreErrors&ClientOptions.IgnoreTransactions(#819) - Add
http.request.methodattribute for performance span data (#786) - Accept
interface{}for span data values (#784)
- Fix missing stack trace for parsing error in
logrusentry(#689)
The Sentry SDK team is happy to announce the immediate availability of Sentry Go SDK v0.27.0.
Exception.ThreadIdis now typed asuint64. It was wrongly typed asstringbefore. (#770)
- Export
Event.Attachments(#771)
The Sentry SDK team is happy to announce the immediate availability of Sentry Go SDK v0.26.0.
As previously announced, this release removes some methods from the SDK.
sentry.TransactionName()usesentry.WithTransactionName()instead.sentry.OpName()usesentry.WithOpName()instead.sentry.TransctionSource()usesentry.WithTransactionSource()instead.sentry.SpanSampled()usesentry.WithSpanSampled()instead.
-
Add
WithDescriptionspan option (#751)span := sentry.StartSpan(ctx, "http.client", WithDescription("GET /api/users"))
-
Add support for package name parsing in Go 1.20 and higher (#730)
- Apply
ClientOptions.SampleRateonly to errors & messages (#754) - Check if git is available before executing any git commands (#737)
The Sentry SDK team is happy to announce the immediate availability of Sentry Go SDK v0.25.0.
As previously announced, this release removes two global constants from the SDK.
sentry.Versionwas removed. Usesentry.SDKVersioninstead (#727)sentry.SDKIdentifierwas removed. UseClient.GetSDKIdentifier()instead (#727)
- Add
ClientOptions.IgnoreTransactions, which allows you to ignore specific transactions based on their name (#717) - Add
ClientOptions.Tags, which allows you to set global tags that are applied to all events. You can also define tags by settingSENTRY_TAGS_environment variables (#718)
- Fix an issue in the profiler that would cause an infinite loop if the duration of a transaction is longer than 30 seconds (#724)
dsn.RequestHeaders()is not to be removed, though it is still considered deprecated and should only be used when using a custom transport that sends events to the/storeendpoint (#720)
The Sentry SDK team is happy to announce the immediate availability of Sentry Go SDK v0.24.1.
- Prevent a panic in
sentryotel.flushSpanProcessor()((#711)) - Prevent a panic when setting the SDK identifier (#715)
The Sentry SDK team is happy to announce the immediate availability of Sentry Go SDK v0.24.0.
sentry.Versionto be removed in 0.25.0. Usesentry.SDKVersioninstead.sentry.SDKIdentifierto be removed in 0.25.0. UseClient.GetSDKIdentifier()instead.dsn.RequestHeaders()to be removed after 0.25.0, but no earlier than December 1, 2023. Requests to the/envelopeendpoint are authenticated using the DSN in the envelope header.
- Run a single instance of the profiler instead of multiple ones for each Go routine (#655)
- Use the route path as the transaction names when using the Gin integration (#675)
- Set the SDK name accordingly when a framework integration is used (#694)
- Read release information (VCS revision) from
debug.ReadBuildInfo(#704)
- [otel] Fix incorrect usage of
attributes.Value.AsString(#684) - Fix trace function name parsing in profiler on go1.21+ (#695)
The Sentry SDK team is happy to announce the immediate availability of Sentry Go SDK v0.23.0.
-
Initial support for Cron Monitoring (#661)
This is how the basic usage of the feature looks like:
// 🟡 Notify Sentry your job is running: checkinId := sentry.CaptureCheckIn( &sentry.CheckIn{ MonitorSlug: "<monitor-slug>", Status: sentry.CheckInStatusInProgress, }, nil, ) // Execute your scheduled task here... // 🟢 Notify Sentry your job has completed successfully: sentry.CaptureCheckIn( &sentry.CheckIn{ ID: *checkinId, MonitorSlug: "<monitor-slug>", Status: sentry.CheckInStatusOK, }, nil, )
A full example of using Crons Monitoring is available here.
More documentation on configuring and using Crons can be found here.
-
Add support for Event Attachments (#670)
It's now possible to add file/binary payloads to Sentry events:
sentry.ConfigureScope(func(scope *sentry.Scope) { scope.AddAttachment(&Attachment{ Filename: "report.html", ContentType: "text/html", Payload: []byte("<h1>Look, HTML</h1>"), }) })
The attachment will then be accessible on the Issue Details page.
-
Add sampling decision to trace envelope header (#666)
-
Expose SpanFromContext function (#672)
- Make
Span.Finisha no-op when the span is already finished (#660)
The Sentry SDK team is happy to announce the immediate availability of Sentry Go SDK v0.22.0.
This release contains initial profiling support, as well as a few bug fixes and improvements.
-
Initial (alpha) support for profiling (#626)
Profiling is disabled by default. To enable it, configure both
TracesSampleRateandProfilesSampleRatewhen initializing the SDK:err := sentry.Init(sentry.ClientOptions{ Dsn: "__DSN__", EnableTracing: true, TracesSampleRate: 1.0, // The sampling rate for profiling is relative to TracesSampleRate. In this case, we'll capture profiles for 100% of transactions. ProfilesSampleRate: 1.0, })
More documentation on profiling and current limitations can be found here.
-
Add transactions/tracing support go the Gin integration (#644)
- Always set a valid source on transactions (#637)
- Clone scope.Context in more places to avoid panics on concurrent reads and writes (#638)
- Fixes #570
- Fix frames recognized as not being in-app still showing as in-app (#647)
The Sentry SDK team is happy to announce the immediate availability of Sentry Go SDK v0.21.0.
Note: this release includes one breaking change and some deprecations, which are listed below.
This change does not apply if you use https://sentry.io
- Remove support for the
/storeendpoint (#631)- This change requires a self-hosted version of Sentry 20.6.0 or higher. If you are using a version of self-hosted Sentry (aka on-premise) older than 20.6.0, then you will need to upgrade your instance.
- Rename four span option functions (#611, #624)
TransctionSource->WithTransactionSourceSpanSampled->WithSpanSampledOpName->WithOpNameTransactionName->WithTransactionName- Old functions
TransctionSource,SpanSampled,OpName, andTransactionNameare still available but are now deprecated and will be removed in a future release.
- Make
client.EventFromMessageandclient.EventFromExceptionmethods public (#607) - Add
client.SetExceptionmethod (#607)- This allows to set or add errors to an existing
Event.
- This allows to set or add errors to an existing
- Protect from panics while doing concurrent reads/writes to Span data fields (#609)
- [otel] Improve detection of Sentry-related spans (#632, #636)
- Fixes cases when HTTP spans containing requests to Sentry were captured by Sentry (#627)
- Drop testing in (legacy) GOPATH mode (#618)
- Remove outdated documentation from https://pkg.go.dev/github.com/getsentry/sentry-go (#623)
The Sentry SDK team is happy to announce the immediate availability of Sentry Go SDK v0.20.0.
Note: this release has some breaking changes, which are listed below.
-
Remove the following methods:
Scope.SetTransaction(),Scope.Transaction()(#605)Span.Name should be used instead to access the transaction's name.
For example, the following
TracesSamplerfunction should be now written as follows:Before:
TracesSampler: func(ctx sentry.SamplingContext) float64 { hub := sentry.GetHubFromContext(ctx.Span.Context()) if hub.Scope().Transaction() == "GET /health" { return 0 } return 1 },
After:
TracesSampler: func(ctx sentry.SamplingContext) float64 { if ctx.Span.Name == "GET /health" { return 0 } return 1 },
- Add
Span.SetContext()method (#599)- It is recommended to use it instead of
hub.Scope().SetContextwhen setting or updating context on transactions.
- It is recommended to use it instead of
- Add
DebugMetainterface toEventand extendFramestructure with more fields (#606)- More about DebugMeta interface here.
- [otel] Fix missing OpenTelemetry context on some events (#599, #605)
- Fixes (#596).
- [otel] Better handling for HTTP span attributes (#610)
- Bump minimum versions:
github.com/kataras/iris/v12to 12.2.0,github.com/labstack/echo/v4to v4.10.0 (#595) - Bump
google.golang.org/protobufminimum required version to 1.29.1 (#604)- This fixes a potential denial of service issue (CVE-2023-24535).
- Exclude the
otelmodule when building in GOPATH mode (#615)
The Sentry SDK team is happy to announce the immediate availability of Sentry Go SDK v0.19.0.
- [otel] Use the correct "trace" context when sending a Sentry error (#580)
- Drop support for Go 1.17, add support for Go 1.20 (#563)
- According to our policy, we're officially supporting the last three minor releases of Go.
- Switch repository license to MIT (#583)
- More about Sentry licensing here.
- Bump
golang.org/x/textminimum required version to 0.3.8 (#586)- This fixes CVE-2022-32149 vulnerability.
The Sentry SDK team is happy to announce the immediate availability of Sentry Go SDK v0.18.0. This release contains initial support for OpenTelemetry and various other bug fixes and improvements.
Note: This is the last release supporting Go 1.17.
-
Initial support for OpenTelemetry. You can now send all your OpenTelemetry spans to Sentry.
Install the
otelmodulego get github.com/getsentry/sentry-go \ github.com/getsentry/sentry-go/otelConfigure the Sentry and OpenTelemetry SDKs
import ( "go.opentelemetry.io/otel" sdktrace "go.opentelemetry.io/otel/sdk/trace" "github.com/getsentry/sentry-go" "github.com/getsentry/sentry-go/otel" // ... ) // Initlaize the Sentry SDK sentry.Init(sentry.ClientOptions{ Dsn: "__DSN__", EnableTracing: true, TracesSampleRate: 1.0, }) // Set up the Sentry span processor tp := sdktrace.NewTracerProvider( sdktrace.WithSpanProcessor(sentryotel.NewSentrySpanProcessor()), // ... ) otel.SetTracerProvider(tp) // Set up the Sentry propagator otel.SetTextMapPropagator(sentryotel.NewSentryPropagator())
You can read more about using OpenTelemetry with Sentry in our docs.
- Do not freeze the Dynamic Sampling Context when no Sentry values are present in the baggage header (#532)
- Create a frozen Dynamic Sampling Context when calling
span.ToBaggage()(#566) - Fix baggage parsing and encoding in vendored otel package (#568)
- Add
Span.SetDynamicSamplingContext()(#539) - Add various getters for
Dsn(#540) - Add
SpanOption::SpanSampled(#546) - Add
Span.SetData()(#542) - Add
Span.IsTransaction()(#543) - Add
Span.GetTransaction()method (#558)
The Sentry SDK team is happy to announce the immediate availability of Sentry Go SDK v0.17.0.
This release contains a new BeforeSendTransaction hook option and corrects two regressions introduced in 0.16.0.
- Add
BeforeSendTransactionhook toClientOptions(#517)- Here's an example of how BeforeSendTransaction can be used to modify or drop transaction events.
- Do not crash in Span.Finish() when the Client is empty #520
- Fixes #518
- Attach non-PII/non-sensitive request headers to events when
ClientOptions.SendDefaultPiiis set tofalse(#524)- Fixes #523
- Clarify how to handle logrus.Fatalf events (#501)
- Rename the
examplesdirectory to_examples(#521)- This removes an indirect dependency to
github.com/golang-jwt/jwt
- This removes an indirect dependency to
The Sentry SDK team is happy to announce the immediate availability of Sentry Go SDK v0.16.0.
Due to ongoing work towards a stable API for v1.0.0, we sadly had to include two breaking changes in this release.
- Add
EnableTracing, a boolean option flag to enable performance monitoring (falseby default).-
If you're using
TracesSampleRateorTracesSampler, this option is required to enable performance monitoring.sentry.Init(sentry.ClientOptions{ EnableTracing: true, TracesSampleRate: 1.0, })
-
- Unify TracesSampler #498
-
TracesSamplerwas changed to a callback that must return afloat64between0.0and1.0.For example, you can apply a sample rate of
1.0(100%) to all/apitransactions, and a sample rate of0.5(50%) to all other transactions. You can read more about this in our SDK docs.sentry.Init(sentry.ClientOptions{ TracesSampler: sentry.TracesSampler(func(ctx sentry.SamplingContext) float64 { hub := sentry.GetHubFromContext(ctx.Span.Context()) name := hub.Scope().Transaction() if strings.HasPrefix(name, "GET /api") { return 1.0 } return 0.5 }), }
-
- Send errors logged with Logrus to Sentry.
- Have a look at our logrus examples on how to use the integration.
- Add support for Dynamic Sampling #491
- You can read more about Dynamic Sampling in our product docs.
- Add detailed logging about the reason transactions are being dropped.
- You can enable SDK logging via
sentry.ClientOptions.Debug: true.
- You can enable SDK logging via
- fix: Scope values should not override Event values (#446)
- feat: Make maximum amount of spans configurable (#460)
- feat: Add a method to start a transaction (#482)
- feat: Extend User interface by adding Data, Name and Segment (#483)
- feat: Add ClientOptions.SendDefaultPII (#485)
- feat: Add function to continue from trace string (#434)
- feat: Add
max-depthoptions (#428) - [breaking] ref: Use a
Contexttype mapping to amap[string]interface{}for all event contexts (#444) - [breaking] ref: Replace deprecated
ioutilpkg withos&io(#454) - ref: Optimize
stacktrace.gofrom size and speed (#467) - ci: Test against
go1.19andgo1.18, dropgo1.16andgo1.15support (#432, #477) - deps: Dependency update to fix CVEs (#462, #464, #477)
NOTE: This version drops support for Go 1.16 and Go 1.15. The currently supported Go versions are the last 3 stable releases: 1.19, 1.18 and 1.17.
- ref: Change DSN ProjectID to be a string (#420)
- fix: When extracting PCs from stack frames, try the
PCfield (#393) - build: Bump gin-gonic/gin from v1.4.0 to v1.7.7 (#412)
- build: Bump Go version in go.mod (#410)
- ci: Bump golangci-lint version in GH workflow (#419)
- ci: Update GraphQL config with appropriate permissions (#417)
- ci: ci: Add craft release automation (#422)
- feat: Automatic Release detection (#363, #369, #386, #400)
- fix: Do not change Hub.lastEventID for transactions (#379)
- fix: Do not clear LastEventID when events are dropped (#382)
- Updates to documentation (#366, #385)
NOTE:
This version drops support for Go 1.14, however no changes have been made that would make the SDK not work with Go 1.14. The currently supported Go versions are the last 3 stable releases: 1.15, 1.16 and 1.17.
There are two behavior changes related to LastEventID, both of which were intended to align the behavior of the Sentry Go SDK with other Sentry SDKs.
The new automatic release detection feature makes it easier to use Sentry and separate events per release without requiring extra work from users. We intend to improve this functionality in a future release by utilizing information that will be available in runtime starting with Go 1.18. The tracking issue is #401.
- feat(transports): Category-based Rate Limiting (#354)
- feat(transports): Report User-Agent identifying SDK (#357)
- fix(scope): Include event processors in clone (#349)
- Improvements to
go docdocumentation (#344, #350, #351) - Miscellaneous changes to our testing infrastructure with GitHub Actions (57123a40, #128, #338, #345, #346, #352, #353, #355)
NOTE:
This version drops support for Go 1.13. The currently supported Go versions are the last 3 stable releases: 1.14, 1.15 and 1.16.
Users of the tracing functionality (StartSpan, etc) should upgrade to this version to benefit from separate rate limits for errors and transactions.
There are no breaking changes and upgrading should be a smooth experience for all users.
- feat: Debug connection reuse (#323)
- fix: Send root span data as
Event.Extra(#329) - fix: Do not double sample transactions (#328)
- fix: Do not override trace context of transactions (#327)
- fix: Drain and close API response bodies (#322)
- ci: Run tests against Go tip (#319)
- ci: Move away from Travis in favor of GitHub Actions (#314) (#321)
- feat: Initial tracing and performance monitoring support (#285)
- doc: Revamp sentryhttp documentation (#304)
- fix: Hub.PopScope never empties the scope stack (#300)
- ref: Report Event.Timestamp in local time (#299)
- ref: Report Breadcrumb.Timestamp in local time (#299)
NOTE:
This version introduces support for Sentry's Performance Monitoring.
The new tracing capabilities are beta, and we plan to expand them on future versions. Feedback is welcome, please open new issues on GitHub.
The sentryhttp package got better API docs, an updated usage example and support for creating automatic transactions as part of Performance Monitoring.
- build: Bump required version of Iris (#296)
- fix: avoid unnecessary allocation in Client.processEvent (#293)
- doc: Remove deprecation of sentryhttp.HandleFunc (#284)
- ref: Update sentryhttp example (#283)
- doc: Improve documentation of sentryhttp package (#282)
- doc: Clarify SampleRate documentation (#279)
- fix: Remove RawStacktrace (#278)
- docs: Add example of custom HTTP transport
- ci: Test against go1.15, drop go1.12 support (#271)
NOTE:
This version comes with a few updates. Some examples and documentation have been
improved. We've bumped the supported version of the Iris framework to avoid
LGPL-licensed modules in the module dependency graph.
The Exception.RawStacktrace and Thread.RawStacktrace fields have been
removed to conform to Sentry's ingestion protocol, only Exception.Stacktrace
and Thread.Stacktrace should appear in user code.
- feat: Include original error when event cannot be encoded as JSON (#258)
- feat: Use Hub from request context when available (#217, #259)
- feat: Extract stack frames from golang.org/x/xerrors (#262)
- feat: Make Environment Integration preserve existing context data (#261)
- feat: Recover and RecoverWithContext with arbitrary types (#268)
- feat: Report bad usage of CaptureMessage and CaptureEvent (#269)
- feat: Send debug logging to stderr by default (#266)
- feat: Several improvements to documentation (#223, #245, #250, #265)
- feat: Example of Recover followed by panic (#241, #247)
- feat: Add Transactions and Spans (to support OpenTelemetry Sentry Exporter) (#235, #243, #254)
- fix: Set either Frame.Filename or Frame.AbsPath (#233)
- fix: Clone requestBody to new Scope (#244)
- fix: Synchronize access and mutation of Hub.lastEventID (#264)
- fix: Avoid repeated syscalls in prepareEvent (#256)
- fix: Do not allocate new RNG for every event (#256)
- fix: Remove stale replace directive in go.mod (#255)
- fix(http): Deprecate HandleFunc, remove duplication (#260)
NOTE: This version comes packed with several fixes and improvements and no breaking changes. Notably, there is a change in how the SDK reports file names in stack traces that should resolve any ambiguity when looking at stack traces and using the Suspect Commits feature. We recommend all users to upgrade.
- fix: Use NewEvent to init Event struct (#220)
NOTE: A change introduced in v0.6.0 with the intent of avoiding allocations made a pattern used in official examples break in certain circumstances (attempting to write to a nil map). This release reverts the change such that maps in the Event struct are always allocated.
- feat: Read module dependencies from runtime/debug (#199)
- feat: Support chained errors using Unwrap (#206)
- feat: Report chain of errors when available (#185)
- [breaking] fix: Accept http.RoundTripper to customize transport (#205)
Before the SDK accepted a concrete value of type
*http.TransportinClientOptions, now it accepts any value implementing thehttp.RoundTripperinterface. Note that*http.Transportimplementshttp.RoundTripper, so most code bases will continue to work unchanged. Users of custom transport gain the ability to pass in other implementations ofhttp.RoundTripperand may be able to simplify their code bases. - fix: Do not panic when scope event processor drops event (#192)
- [breaking] fix: Use time.Time for timestamps (#191)
Users of sentry-go typically do not need to manipulate timestamps manually.
For those who do, the field type changed from
int64totime.Time, which should be more convenient to use. The recommended way to get the current time istime.Now().UTC(). - fix: Report usage error including stack trace (#189)
- feat: Add Exception.ThreadID field (#183)
- ci: Test against Go 1.14, drop 1.11 (#170)
- feat: Limit reading bytes from request bodies (#168)
- [breaking] fix: Rename fasthttp integration package sentryhttp => sentryfasthttp
The current recommendation is to use a named import, in which case existing
code should not require any change:
package main import ( "fmt" "github.com/getsentry/sentry-go" sentryfasthttp "github.com/getsentry/sentry-go/fasthttp" "github.com/valyala/fasthttp" )
NOTE: This version includes some new features and a few breaking changes, none of which should pose troubles with upgrading. Most code bases should be able to upgrade without any changes.
- fix: Ignore err.Cause() when it is nil (#160)
- fix: Synchronize access to HTTPTransport.disabledUntil (#158)
- docs: Update Flush documentation (#153)
- fix: HTTPTransport.Flush panic and data race (#140)
NOTE:
This version changes the implementation of the default transport, modifying the
behavior of sentry.Flush. The previous behavior was to wait until there were
no buffered events; new concurrent events kept Flush from returning. The new
behavior is to wait until the last event prior to the call to Flush has been
sent or the timeout; new concurrent events have no effect. The new behavior is
inline with the Unified API
Guidelines.
We have updated the documentation and examples to clarify that Flush is meant
to be called typically only once before program termination, to wait for
in-flight events to be sent to Sentry. Calling Flush after every event is not
recommended, as it introduces unnecessary latency to the surrounding function.
Please verify the usage of sentry.Flush in your code base.
- fix(stacktrace): Correctly report package names (#127)
- fix(stacktrace): Do not rely on AbsPath of files (#123)
- build: Require github.com/ugorji/go@v1.1.7 (#110)
- fix: Correctly store last event id (#99)
- fix: Include request body in event payload (#94)
- build: Reset go.mod version to 1.11 (#109)
- fix: Eliminate data race in modules integration (#105)
- feat: Add support for path prefixes in the DSN (#102)
- feat: Add HTTPClient option (#86)
- feat: Extract correct type and value from top-most error (#85)
- feat: Check for broken pipe errors in Gin integration (#82)
- fix: Client.CaptureMessage accept nil EventModifier (#72)
- feat: Send extra information exposed by the Go runtime (#76)
- fix: Handle new lines in module integration (#65)
- fix: Make sure that cache is locked when updating for contextifyFramesIntegration
- ref: Update Iris integration and example to version 12
- misc: Remove indirect dependencies in order to move them to separate go.mod files
- feat: Retry event marshaling without contextual data if the first pass fails
- fix: Include
url.Parseerror inDsnParseError - fix: Make more
Scopemethods safe for concurrency - fix: Synchronize concurrent access to
Hub.client - ref: Remove mutex from
Scopeexported API - ref: Remove mutex from
Hubexported API - ref: Compile regexps for
filterFramesonly once - ref: Change
SampleRatetype tofloat64 - doc:
Scope.Clearnot safe for concurrent use - ci: Test sentry-go with
go1.13, dropgo1.10
NOTE:
This version removes some of the internal APIs that landed publicly (namely Hub/Scope mutex structs) and may require (but shouldn't) some changes to your code.
It's not done through major version update, as we are still in 0.x stage.
- fix: Run
Contextifyintegration onThreadsas well
- feat: Add
SetTransaction()method on theScope - feat:
fasthttpframework support withsentryfasthttppackage - fix: Add
RWMutexlocks to internalHubandScopechanges
- feat: Move frames context reading into
contextifyFramesIntegration(#28)
NOTE: In case of any performance issues due to source contexts IO, you can let us know and turn off the integration in the meantime with:
sentry.Init(sentry.ClientOptions{
Integrations: func(integrations []sentry.Integration) []sentry.Integration {
var filteredIntegrations []sentry.Integration
for _, integration := range integrations {
if integration.Name() == "ContextifyFrames" {
continue
}
filteredIntegrations = append(filteredIntegrations, integration)
}
return filteredIntegrations
},
})- feat: Better source code location resolution and more useful inapp frames (#26)
- feat: Use
noopTransportwhen noDsnprovided (#27) - ref: Allow empty
Dsninstead of returning an error (#22) - fix: Use
NewScopeinstead of literal struct inside ascope.Clearcall (#24) - fix: Add to
WaitGroupbefore the request is put inside a buffer (#25)
- fix: Check for initialized
ClientinAddBreadcrumbs(#20) - build: Bump version when releasing with Craft (#19)
- First stable release! \o/
- feat: [breaking] Add
NewHTTPTransportandNewHTTPSyncTransportwhich accepts all transport options - feat: New
HTTPSyncTransportthat blocks after each call - feat: New
Echointegration - ref: [breaking] Remove
BufferSizeoption fromClientOptionsand move it toHTTPTransportinstead - ref: Export default
HTTPTransport - ref: Export
net/httpintegration handler - ref: Set
Requestinstantly in the package handlers, not inrecoverWithSentryso it can be accessed later on - ci: Add craft config
- feat:
IgnoreErrorsclient option and corresponding integration - ref: Reworked
net/httpintegration, wrote better example and complete readme - ref: Reworked
Ginintegration, wrote better example and complete readme - ref: Reworked
Irisintegration, wrote better example and complete readme - ref: Reworked
Negroniintegration, wrote better example and complete readme - ref: Reworked
Martiniintegration, wrote better example and complete readme - ref: Remove
Handle()from frameworks handlers and return it directly from New
- feat:
Irisframework support withsentryirispackage - feat:
Ginframework support withsentryginpackage - feat:
Martiniframework support withsentrymartinipackage - feat:
Negroniframework support withsentrynegronipackage - feat: Add
Hub.Clone()for easier frameworks integration - feat: Return
EventIDfromRecoverymethods - feat: Add
NewScopeandNewEventfunctions and use them in the whole codebase - feat: Add
AddEventProcessorto theClient - fix: Operate on requests body copy instead of the original
- ref: Try to read source files from the root directory, based on the filename as well, to make it work on AWS Lambda
- ref: Remove
gocertifidependence and document how to provide your own certificates - ref: [breaking] Remove
DecorateandDecorateFuncmethods in favor ofsentryhttppackage - ref: [breaking] Allow for integrations to live on the client, by passing client instance in
SetupOncemethod - ref: [breaking] Remove
GetIntegrationfrom theHub - ref: [breaking] Remove
GlobalEventProcessorsgetter from the public API
- feat: Add
AttachStacktraceclient option to include stacktrace for messages - feat: Add
BufferSizeclient option to configure transport buffer size - feat: Add
SetRequestmethod on aScopeto controlRequestcontext data - feat: Add
FromHTTPRequestforRequesttype for easier extraction - ref: Extract
Requestinformation more accurately - fix: Attach
ServerName,Release,Dist,Environmentoptions to the event - fix: Don't log events dropped due to full transport buffer as sent
- fix: Don't panic and create an appropriate event when called
CaptureExceptionorRecoverwithnilvalue
- Initial release