The Sentry SDK team is happy to announce the immediate availability of Sentry PHP SDK v4.10.0.
- The SDK was updated to support PHP 8.4 (#1760)
- Expose a new
http_ssl_native_ca
option to tell the HTTP client to use the operating system's native CA store for certificate verification (#1766)
- Fix the
http_timeout
&http_connect_timeout
options, which now also work with sub second values (#1785)
- HTTP breadcrumbs created by the
GuzzleTracingMiddleware
are now set to a warning status for4xx
responses and an error status for5xx
responses (#1773) - All public Metrics APIs are now no-op, intneral APIs were removed (#1786)
The Sentry SDK team is happy to announce the immediate availability of Sentry PHP SDK v4.9.0.
-
Allow retrieving a single piece of data from the span by it’s key (#1767)
\Sentry\SentrySdk::getCurrentHub()->getSpan()?->setData([ 'failure' => $span->getData('failure', 0) + 1, ]);
-
Add span trace origin (#1769)
The Sentry SDK team is happy to announce the immediate availability of Sentry PHP SDK v4.8.1.
- Guard against empty
REMOTE_ADDR
(#1751)
The Sentry SDK team is happy to announce the immediate availability of Sentry PHP SDK v4.8.0.
-
Add timing span when emiting a timing metric (#1717)
use function Sentry\metrics; // This will now both emit a distribution metric and a span with the "expensive-operation" key metrics()->timing( key: 'expensive-operation', callback: fn() => doExpensiveOperation(), );
- Implement fast path for ignoring errors (#1737)
- Add array shape for better autocomplete of
Sentry\init
function (#1738) - Represent callable strings as strings (#1741)
- Use
AWS_LAMBDA_FUNCTION_VERSION
environment variable for release if available (#1742)
The Sentry SDK team is happy to announce the immediate availability of Sentry PHP SDK v4.7.0.
- Improve debugging experience by emitting more logs from the SDK (#1705)
- Handle
metric_bucket
rate limits (#1726) & (#1728)
- Fix deprecation notice when trying to serialize a callable (#1732)
- Deprecated
SpanStatus::resourceExchausted()
. UseSpanStatus::resourceExhausted()
instead (#1725) - Update metric normalization (#1729)
The Sentry SDK team is happy to announce the immediate availability of Sentry PHP SDK v4.6.1.
- Always add the sampled flag to the W3C
traceparent
header (#1713) - Add
JSON_ERROR_NON_BACKED_ENUM
to allowedJSON::encode()
errors. (#1707)
The Sentry SDK team is happy to announce the immediate availability of Sentry PHP SDK v4.6.0.
- Add the PHP SAPI to the runtime context (#1700)
- Correctly apply properties/options in
ClientBuilder::class
(#1699) - Attach
_metrics_summary
to transactions (#1702)
- Remove
final
fromMetrics::class
(#1697) - Return early when using
ignore_exceptions
(#1701) - Attach exceptions to the log message from
FrameContextifierIntegration::class
(#1678)
The Sentry SDK team is happy to announce the immediate availability of Sentry PHP SDK v4.5.0.
-
Add
before_send_check_in
andbefore_send_metrics
(#1690)\Sentry\init([ 'before_send_check_in' => function (\Sentry\Event $event) { $checkIn = $event->getCheckIn(), // modify the check-in or return null to not send it }, ]);
\Sentry\init([ 'before_send_metrics' => function (\Sentry\Event $event) { $metrics = $event->getMetrics(), // modify the metrics or return null to not send it }, ]);
-
Fix
_metrics_summary
formatting (#1682) -
Fix
DebugFileLogger
andDebugStdOutLogger
to be usable with PHP 7.2 and up (#1691) -
Allow whitespace in metric tag values (#1692)
The Sentry SDK team is happy to announce the immediate availability of Sentry PHP SDK v4.4.0.
-
Add
metrics()->timing()
(#1670)This allows you to emit a distribution metric based on the duration of the provided callback.
use function Sentry\metrics; metrics()->timing( key: 'my-metric', callback: fn() => doSomething(), );
-
Add
withMonitor()
(#1679)This wraps a callback into monitor check-ins.
use function Sentry\withMonitor; withMonitor( slug: 'my-monitor', callback: fn () => doSomething(), monitorConfig: new MonitorConfig(...), );
-
Add new
failure_issue_threshold
andrecovery_threshold
configuration toMonitorConfig
(#1685) -
Add
TransactionContext::make()
andSpanContext::make()
(#1684)use Sentry\Tracing\SpanContext; $spanCpntext = SpanContext::make() ->setOp('http.client') ->setDescription('GET https://example.com')
-
Add support for fluent use of
Transaction::setName()
(#1687) -
Add support for the W3C
traceparent
header (#1680)
-
Do not send an empty event if no metrics are in the bucket (#1676)
-
Fix the
http_ssl_verify_peer
option to set the correct value toCURLOPT_SSL_VERIFYPEER
(#1686)
- Depreacted
UserDataBag::getSegment()
andUserDataBag::setSegment()
. You may use a custom tag or context instead (#1681)
The Sentry SDK team is happy to announce the immediate availability of Sentry PHP SDK v4.3.1.
- Fix tags not being serialized correctly for metrics (#1672)
- Remove
@internal
annotation fromMetricsUnit
class (#1671)
The Sentry SDK team is happy to announce the immediate availability of Sentry PHP SDK v4.3.0.
-
Add support for Sentry Developer Metrics (#1619)
use function Sentry\metrics; // Add 4 to a counter named hits metrics()->increment(key: 'hits', value: 4); // Add 25 to a distribution named response_time with unit milliseconds metrics()->distribution(key: 'response_time', value: 25, unit: MetricsUnit::millisecond()); // Add 2 to gauge named parallel_requests, tagged with type: "a" metrics()->gauge(key: 'parallel_requests, value: 2, tags: ['type': 'a']); // Add a user's email to a set named users.sessions, tagged with role: "admin" metrics()->set('users.sessions, 'jane.doe@example.com', null, ['role' => User::admin()]); // Add 2 to gauge named `parallel_requests`, tagged with `type: "a"` Sentry.metrics.gauge('parallel_requests', 2, { tags: { type: 'a' } }); // Flush the metrics to Sentry metrics()->flush(); // We recommend registering the flushing in a shutdown function register_shutdown_function(static fn () => metrics()->flush());
To learn more about Sentry Developer Merics, join the discussion at #1666.
- Disallow to seralize the
HubAdapter::class
(#1663) - Do not overwrite trace context on event (#1668)
- Serialize breadcrumb data to display correct in the Sentry UI (#1669)
- Remove the
final
keyword fromHub::class
,Client::class
andScope::class
(#1665)
The Sentry SDK team is happy to announce the immediate availability of Sentry PHP SDK v4.2.0.
-
Add a config option to allow overriding the Spotlight url (#1659)
Sentry\init([ 'spotlight_url' => 'http://localhost:8969', ]);
-
Restore setting the
logger
value on the event payload (#1657) -
Only apply the
sample_rate
on error/message events (#1662)This fixes an issue where Cron Check-Ins were wrongly sampled out if a
sample_rate
lower than1.0
is used.
- Remove the
@internal
annotation fromClientBuilder::class
(#1661)
The Sentry SDK team is happy to announce the immediate availability of Sentry PHP SDK v4.1.0.
-
Add support for Spotlight (#1647)
Spotlight is Sentry for Development. Inspired by an old project, Django Debug Toolbar. Spotlight brings a rich debug overlay into development environments, and it does it by leveraging the existing power of Sentry's SDKs.
To learn more about Spotlight, go to https://spotlightjs.com/.
- Normalize
response
status (#1644)
The Sentry SDK team is happy to announce the immediate availability of Sentry PHP SDK v4.0.1.
- Fix capturing out-of-memory errors when memory-constrained (#1636)
- Check if the cURL extension is installed (#1632)
The Sentry SDK team is thrilled to announce the immediate availability of Sentry PHP SDK v4.0.0.
Please refer to the UPGRADE-4.0.md guide for a complete list of breaking changes.
-
This version exclusively uses the envelope endpoint to send event data to Sentry.
If you are using sentry.io, no action is needed. If you are using an on-premise/self-hosted installation of Sentry, the minimum requirement is now version
>= v20.6.0
. -
You need to have
ext-curl
installed to use the SDK. -
The
IgnoreErrorsIntegration
integration was removed. Use theignore_exceptions
option instead.Sentry\init([ 'ignore_exceptions' => [BadThingsHappenedException::class], ]);
This option performs an
is_a
check now, so you can also ignore more generic exceptions.
-
Add new fluent APIs (#1601)
// Before $transactionContext = new TransactionContext(); $transactionContext->setName('GET /example'); $transactionContext->setOp('http.server'); // After $transactionContext = (new TransactionContext()) ->setName('GET /example'); ->setOp('http.server');
-
Simplify the breadcrumb API (#1603)
// Before \Sentry\addBreadcrumb( new \Sentry\Breadcrumb( \Sentry\Breadcrumb::LEVEL_INFO, \Sentry\Breadcrumb::TYPE_DEFAULT, 'auth', // category 'User authenticated', // message (optional) ['user_id' => $userId] // data (optional) ) ); // After \Sentry\addBreadcrumb( category: 'auth', message: 'User authenticated', // optional metadata: ['user_id' => $userId], // optional level: Breadcrumb::LEVEL_INFO, // set by default type: Breadcrumb::TYPE_DEFAULT, // set by default );
-
New
logger
option (#1625)To make it easier to debug the internals of the SDK, the
logger
option now accepts aPsr\Log\LoggerInterface
instance. We do provide two implementations,Sentry\Logger\DebugFileLogger
andSentry\Logger\DebugStdOutLogger
.// This logs messages to the provided file path Sentry\init([ 'logger' => new DebugFileLogger(filePath: ROOT . DS . 'sentry.log'), ]); // This logs messages to stdout Sentry\init([ 'logger' => new DebugStdOutLogger(), ]);
-
New default cURL HTTP client (#1589)
The SDK now ships with its own HTTP client based on cURL. A few new options were added.
Sentry\init([ 'http_proxy_authentication' => 'username:password', // user name and password to use for proxy authentication 'http_ssl_verify_peer' => false, // default true, verify the peer's SSL certificate 'http_compression' => false, // default true, http request body compression ]);
To use a different client, you may use the
http_client
option.use Sentry\Client; use Sentry\HttpClient\HttpClientInterface; use Sentry\HttpClient\Request; use Sentry\HttpClient\Response; use Sentry\Options; $httpClient = new class() implements HttpClientInterface { public function sendRequest(Request $request, Options $options): Response { // your custom implementation return new Response($response->getStatusCode(), $response->getHeaders(), ''); } }; Sentry\init([ 'http_client' => $httpClient, ]);
To use a different transport, you may use the
transport
option. A custom transport must implement theTransportInterface
. If you use thetransport
option, thehttp_client
option has no effect.
- The abandoned package
php-http/message-factory
was removed.