Skip to content

Commit 31edf15

Browse files
authored
Fix setting the configured PSR-3 logger on the transport factory (#555)
1 parent ca318a6 commit 31edf15

File tree

4 files changed

+23
-1
lines changed

4 files changed

+23
-1
lines changed

CHANGELOG.md

+1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
## Unreleased
44

55
- Fix: Test if `TracingStatement` exists before attempting to create the class alias, otherwise it breaks when opcache is enabled. (#552)
6+
- Fix: Pass logger from `logger` config option to `TransportFactory` (#555)
67

78
## 4.2.2 (2021-08-30)
89

src/DependencyInjection/SentryExtension.php

+9-1
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
use Sentry\SentryBundle\Tracing\Twig\TwigTracingExtension;
2828
use Sentry\Serializer\RepresentationSerializer;
2929
use Sentry\Serializer\Serializer;
30+
use Sentry\Transport\TransportFactoryInterface;
3031
use Symfony\Bundle\TwigBundle\TwigBundle;
3132
use Symfony\Component\Cache\CacheItem;
3233
use Symfony\Component\Config\FileLocator;
@@ -124,14 +125,21 @@ private function registerConfiguration(ContainerBuilder $container, array $confi
124125
->setPublic(false)
125126
->setArgument(0, new Reference('sentry.client.options'));
126127

128+
$loggerReference = null === $config['logger']
129+
? new Reference(NullLogger::class, ContainerBuilder::IGNORE_ON_INVALID_REFERENCE)
130+
: new Reference($config['logger']);
131+
132+
$factoryBuilderDefinition = $container->getDefinition(TransportFactoryInterface::class);
133+
$factoryBuilderDefinition->setArgument('$logger', $loggerReference);
134+
127135
$clientBuilderDefinition = (new Definition(ClientBuilder::class))
128136
->setArgument(0, new Reference('sentry.client.options'))
129137
->addMethodCall('setSdkIdentifier', [SentryBundle::SDK_IDENTIFIER])
130138
->addMethodCall('setSdkVersion', [PrettyVersions::getVersion('sentry/sentry-symfony')->getPrettyVersion()])
131139
->addMethodCall('setTransportFactory', [new Reference($config['transport_factory'])])
132140
->addMethodCall('setSerializer', [$serializer])
133141
->addMethodCall('setRepresentationSerializer', [$representationSerializerDefinition])
134-
->addMethodCall('setLogger', [null !== $config['logger'] ? new Reference($config['logger']) : new Reference(NullLogger::class, ContainerBuilder::IGNORE_ON_INVALID_REFERENCE)]);
142+
->addMethodCall('setLogger', [$loggerReference]);
135143

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

src/Resources/config/services.xml

+2
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
<argument type="service" id="Psr\Http\Message\RequestFactoryInterface" on-invalid="ignore" />
1515
<argument type="service" id="Psr\Http\Message\ResponseFactoryInterface" on-invalid="ignore" />
1616
<argument type="service" id="Psr\Http\Message\StreamFactoryInterface" on-invalid="ignore" />
17+
<argument>null</argument>
18+
<argument /> <!-- $logger -->
1719
</service>
1820

1921
<service id="Sentry\State\HubInterface">

tests/DependencyInjection/SentryExtensionTest.php

+11
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
use Sentry\SentryBundle\Tracing\Twig\TwigTracingExtension;
2727
use Sentry\Serializer\RepresentationSerializer;
2828
use Sentry\Serializer\Serializer;
29+
use Sentry\Transport\TransportFactoryInterface;
2930
use Symfony\Bundle\TwigBundle\TwigBundle;
3031
use Symfony\Component\Console\ConsoleEvents;
3132
use Symfony\Component\DependencyInjection\ContainerBuilder;
@@ -245,6 +246,16 @@ public function testClientIsCreatedFromOptions(): void
245246
$this->assertEquals($methodCalls[4][1][0]->getArgument(0), new Reference('sentry.client.options'));
246247
}
247248

249+
public function testLoggerIsPassedToTransportFactory(): void
250+
{
251+
$container = $this->createContainerFromFixture('full');
252+
253+
$transportFactoryDefinition = $container->findDefinition(TransportFactoryInterface::class);
254+
$logger = $transportFactoryDefinition->getArgument('$logger');
255+
256+
$this->assertSame('app.logger', $logger->__toString());
257+
}
258+
248259
public function testErrorTypesOptionIsParsedFromStringToIntegerValue(): void
249260
{
250261
$container = $this->createContainerFromFixture('error_types');

0 commit comments

Comments
 (0)