Skip to content

Commit 471b9e2

Browse files
authored
Add the logger config option to ease setting a PSR-3 logger to debug the SDK (#538)
1 parent 95e0d62 commit 471b9e2

File tree

12 files changed

+47
-1
lines changed

12 files changed

+47
-1
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
- Add the `sentry_trace_meta()` Twig function to print the `sentry-trace` HTML meta tag (#510)
77
- Make the list of commands for which distributed tracing is active configurable (#515)
88
- Introduce `TracingDriverConnection::getWrappedConnection()` (#536)
9+
- Add the `logger` config option to ease setting a PSR-3 logger to debug the SDK (#538)
910

1011
## 4.1.4 (2021-06-18)
1112

src/DependencyInjection/Configuration.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,10 @@ public function getConfigTreeBuilder(): TreeBuilder
3636
->info('If this value is not provided, the SDK will try to read it from the SENTRY_DSN environment variable. If that variable also does not exist, the SDK will just not send any events.')
3737
->end()
3838
->booleanNode('register_error_listener')->defaultTrue()->end()
39+
->scalarNode('logger')
40+
->info('The service ID of the PSR-3 logger used to log messages coming from the SDK client. Be aware that setting the same logger of the application may create a circular loop when an event fails to be sent.')
41+
->defaultNull()
42+
->end()
3943
->scalarNode('transport_factory')
4044
->info('The service ID of the transport factory used by the default SDK client.')
4145
->defaultValue(TransportFactoryInterface::class)

src/DependencyInjection/SentryExtension.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
use Doctrine\Bundle\DoctrineBundle\DoctrineBundle;
88
use Jean85\PrettyVersions;
99
use LogicException;
10+
use Psr\Log\NullLogger;
1011
use Sentry\Client;
1112
use Sentry\ClientBuilder;
1213
use Sentry\Integration\IgnoreErrorsIntegration;
@@ -129,7 +130,8 @@ private function registerConfiguration(ContainerBuilder $container, array $confi
129130
->addMethodCall('setSdkVersion', [PrettyVersions::getVersion('sentry/sentry-symfony')->getPrettyVersion()])
130131
->addMethodCall('setTransportFactory', [new Reference($config['transport_factory'])])
131132
->addMethodCall('setSerializer', [$serializer])
132-
->addMethodCall('setRepresentationSerializer', [$representationSerializerDefinition]);
133+
->addMethodCall('setRepresentationSerializer', [$representationSerializerDefinition])
134+
->addMethodCall('setLogger', [null !== $config['logger'] ? new Reference($config['logger']) : new Reference(NullLogger::class, ContainerBuilder::IGNORE_ON_INVALID_REFERENCE)]);
133135

134136
$container
135137
->setDefinition('sentry.client', new Definition(Client::class))

src/Resources/config/schema/sentry-1.0.xsd

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
<xsd:attribute name="register-error-listener" type="xsd:boolean" />
1818
<xsd:attribute name="transport-factory" type="xsd:string" />
1919
<xsd:attribute name="dsn" type="xsd:string" />
20+
<xsd:attribute name="logger" type="xsd:string" />
2021
</xsd:complexType>
2122

2223
<xsd:complexType name="options">

tests/DependencyInjection/ConfigurationTest.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ public function testProcessConfigurationWithDefaultConfiguration(): void
2020
{
2121
$expectedBundleDefaultConfig = [
2222
'register_error_listener' => true,
23+
'logger' => null,
2324
'transport_factory' => 'Sentry\\Transport\\TransportFactoryInterface',
2425
'options' => [
2526
'integrations' => [],

tests/DependencyInjection/Fixtures/php/full.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
$container->loadFromExtension('sentry', [
99
'dsn' => 'https://[email protected]/0',
1010
'transport_factory' => 'App\\Sentry\\Transport\\TransportFactory',
11+
'logger' => 'app.logger',
1112
'options' => [
1213
'integrations' => ['App\\Sentry\\Integration\\FooIntegration'],
1314
'default_integrations' => false,
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
use Symfony\Component\DependencyInjection\ContainerBuilder;
6+
7+
/** @var ContainerBuilder $container */
8+
$container->loadFromExtension('sentry', [
9+
'logger' => null,
10+
]);

tests/DependencyInjection/Fixtures/xml/full.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
<sentry:config
1010
dsn="https://[email protected]/0"
1111
transport-factory="App\Sentry\Transport\TransportFactory"
12+
logger="app.logger"
1213
>
1314
<sentry:options default-integrations="false"
1415
send-attempts="1"
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<?xml version="1.0" ?>
2+
3+
<container xmlns="http://symfony.com/schema/dic/services"
4+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
5+
xmlns:sentry="https://sentry.io/schema/dic/sentry-symfony"
6+
xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd
7+
https://sentry.io/schema/dic/sentry-symfony https://sentry.io/schema/dic/sentry-symfony/sentry-1.0.xsd">
8+
9+
<sentry:config logger="null" />
10+
</container>

tests/DependencyInjection/Fixtures/yml/full.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
sentry:
22
dsn: https://[email protected]/0
33
transport_factory: App\Sentry\Transport\TransportFactory
4+
logger: app.logger
45
options:
56
integrations:
67
- App\Sentry\Integration\FooIntegration
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
sentry:
2+
logger: ~

tests/DependencyInjection/SentryExtensionTest.php

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
use Doctrine\Bundle\DoctrineBundle\DoctrineBundle;
88
use Jean85\PrettyVersions;
99
use PHPUnit\Framework\TestCase;
10+
use Psr\Log\NullLogger;
1011
use Sentry\ClientInterface;
1112
use Sentry\Integration\IgnoreErrorsIntegration;
1213
use Sentry\Options;
@@ -231,6 +232,7 @@ public function testClentIsCreatedFromOptions(): void
231232
$this->assertDefinitionMethodCallAt($methodCalls[0], 'setSdkIdentifier', [SentryBundle::SDK_IDENTIFIER]);
232233
$this->assertDefinitionMethodCallAt($methodCalls[1], 'setSdkVersion', [PrettyVersions::getVersion('sentry/sentry-symfony')->getPrettyVersion()]);
233234
$this->assertDefinitionMethodCallAt($methodCalls[2], 'setTransportFactory', [new Reference('App\\Sentry\\Transport\\TransportFactory')]);
235+
$this->assertDefinitionMethodCallAt($methodCalls[5], 'setLogger', [new Reference('app.logger')]);
234236

235237
$this->assertSame('setSerializer', $methodCalls[3][0]);
236238
$this->assertInstanceOf(Definition::class, $methodCalls[3][1][0]);
@@ -369,6 +371,16 @@ public function testConsoleTracingListenerIsConfiguredWhenTracingIsEnabled(): vo
369371
$this->assertSame(['foo:bar', 'bar:foo'], $container->getDefinition(TracingConsoleListener::class)->getArgument(1));
370372
}
371373

374+
public function testLoggerOptionFallbackToNullLoggerIfNotSet(): void
375+
{
376+
$container = $this->createContainerFromFixture('logger_service_not_set');
377+
$clientDefinition = $container->findDefinition(ClientInterface::class);
378+
$factory = $clientDefinition->getFactory();
379+
$methodCalls = $factory[0]->getMethodCalls();
380+
381+
$this->assertDefinitionMethodCallAt($methodCalls[5], 'setLogger', [new Reference(NullLogger::class, ContainerBuilder::IGNORE_ON_INVALID_REFERENCE)]);
382+
}
383+
372384
private function createContainerFromFixture(string $fixtureFile): ContainerBuilder
373385
{
374386
$container = new ContainerBuilder(new EnvPlaceholderParameterBag([

0 commit comments

Comments
 (0)