Skip to content

Commit 2bfab1b

Browse files
committed
Revert #406 to restore monolog handler registration
1 parent 0c609cd commit 2bfab1b

File tree

12 files changed

+182
-1
lines changed

12 files changed

+182
-1
lines changed

src/DependencyInjection/Configuration.php

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
use Doctrine\Bundle\DoctrineBundle\DoctrineBundle;
88
use Jean85\PrettyVersions;
9+
use Monolog\Logger;
910
use Sentry\Options;
1011
use Sentry\SentryBundle\ErrorTypesParser;
1112
use Sentry\Transport\TransportFactoryInterface;
@@ -135,6 +136,7 @@ public function getConfigTreeBuilder(): TreeBuilder
135136
->end();
136137

137138
$this->addMessengerSection($rootNode);
139+
$this->addMonologSection($rootNode);
138140
$this->addDistributedTracingSection($rootNode);
139141

140142
return $treeBuilder;
@@ -153,6 +155,26 @@ private function addMessengerSection(ArrayNodeDefinition $rootNode): void
153155
->end();
154156
}
155157

158+
private function addMonologSection(ArrayNodeDefinition $rootNode): void
159+
{
160+
$rootNode
161+
->children()
162+
->arrayNode('monolog')
163+
->addDefaultsIfNotSet()
164+
->children()
165+
->arrayNode('error_handler')
166+
->{class_exists(Logger::class) ? 'canBeDisabled' : 'canBeEnabled'}()
167+
->end()
168+
->scalarNode('level')
169+
->defaultValue(Logger::DEBUG)
170+
->cannotBeEmpty()
171+
->end()
172+
->booleanNode('bubble')->defaultTrue()->end()
173+
->end()
174+
->end()
175+
->end();
176+
}
177+
156178
private function addDistributedTracingSection(ArrayNodeDefinition $rootNode): void
157179
{
158180
$rootNode

src/DependencyInjection/SentryExtension.php

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,15 @@
66

77
use Doctrine\Bundle\DoctrineBundle\DoctrineBundle;
88
use Jean85\PrettyVersions;
9-
use LogicException;
9+
use Monolog\Logger as MonologLogger;
1010
use Psr\Log\NullLogger;
1111
use Sentry\Client;
1212
use Sentry\ClientBuilder;
1313
use Sentry\Integration\IgnoreErrorsIntegration;
1414
use Sentry\Integration\IntegrationInterface;
1515
use Sentry\Integration\RequestFetcherInterface;
1616
use Sentry\Integration\RequestIntegration;
17+
use Sentry\Monolog\Handler;
1718
use Sentry\Options;
1819
use Sentry\SentryBundle\EventListener\ConsoleListener;
1920
use Sentry\SentryBundle\EventListener\ErrorListener;
@@ -32,6 +33,7 @@
3233
use Symfony\Component\Config\FileLocator;
3334
use Symfony\Component\DependencyInjection\ContainerBuilder;
3435
use Symfony\Component\DependencyInjection\Definition;
36+
use Symfony\Component\DependencyInjection\Exception\LogicException;
3537
use Symfony\Component\DependencyInjection\Loader;
3638
use Symfony\Component\DependencyInjection\Reference;
3739
use Symfony\Component\ErrorHandler\Error\FatalError;
@@ -70,6 +72,7 @@ protected function loadInternal(array $mergedConfig, ContainerBuilder $container
7072
$this->registerDbalTracingConfiguration($container, $mergedConfig['tracing']);
7173
$this->registerTwigTracingConfiguration($container, $mergedConfig['tracing']);
7274
$this->registerCacheTracingConfiguration($container, $mergedConfig['tracing']);
75+
$this->registerMonologHandlerConfiguration($container, $mergedConfig['monolog']);
7376
}
7477

7578
/**
@@ -236,6 +239,28 @@ private function registerCacheTracingConfiguration(ContainerBuilder $container,
236239
$container->setParameter('sentry.tracing.cache.enabled', $isConfigEnabled);
237240
}
238241

242+
/**
243+
* @param array<string, mixed> $config
244+
*/
245+
private function registerMonologHandlerConfiguration(ContainerBuilder $container, array $config): void
246+
{
247+
$errorHandlerConfig = $config['error_handler'];
248+
249+
if (!$errorHandlerConfig['enabled']) {
250+
$container->removeDefinition(Handler::class);
251+
252+
return;
253+
}
254+
255+
if (!class_exists(MonologLogger::class)) {
256+
throw new LogicException(sprintf('To use the "%s" class you need to require the "symfony/monolog-bundle" package.', Handler::class));
257+
}
258+
259+
$definition = $container->getDefinition(Handler::class);
260+
$definition->setArgument(0, MonologLogger::toMonologLevel($config['level']));
261+
$definition->setArgument(1, $config['bubble']);
262+
}
263+
239264
/**
240265
* @param string[] $integrations
241266
* @param array<string, mixed> $config

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

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
<xsd:element name="options" type="options" minOccurs="0" maxOccurs="1" />
1313
<xsd:element name="messenger" type="messenger" minOccurs="0" maxOccurs="1" />
1414
<xsd:element name="tracing" type="tracing" minOccurs="0" maxOccurs="1" />
15+
<xsd:element name="monolog" type="monolog" minOccurs="0" maxOccurs="1" />
1516
</xsd:choice>
1617

1718
<xsd:attribute name="register-error-listener" type="xsd:boolean" />
@@ -115,4 +116,48 @@
115116
<xsd:element name="excluded-command" type="xsd:string" minOccurs="0" maxOccurs="unbounded" />
116117
</xsd:sequence>
117118
</xsd:complexType>
119+
120+
<xsd:complexType name="monolog">
121+
<xsd:choice maxOccurs="unbounded">
122+
<xsd:element name="error-handler" type="monolog-error-handler" minOccurs="0" maxOccurs="1" />
123+
</xsd:choice>
124+
125+
<xsd:attribute name="level" type="monolog-level" />
126+
<xsd:attribute name="bubble" type="xsd:boolean" />
127+
</xsd:complexType>
128+
129+
<xsd:complexType name="monolog-error-handler">
130+
<xsd:attribute name="enabled" type="xsd:boolean" />
131+
</xsd:complexType>
132+
133+
<xsd:simpleType name="monolog-level">
134+
<xsd:restriction base="xsd:string">
135+
<xsd:enumeration value="debug" />
136+
<xsd:enumeration value="info" />
137+
<xsd:enumeration value="notice" />
138+
<xsd:enumeration value="warning" />
139+
<xsd:enumeration value="error" />
140+
<xsd:enumeration value="critical" />
141+
<xsd:enumeration value="alert" />
142+
<xsd:enumeration value="emergency" />
143+
144+
<xsd:enumeration value="DEBUG" />
145+
<xsd:enumeration value="INFO" />
146+
<xsd:enumeration value="NOTICE" />
147+
<xsd:enumeration value="WARNING" />
148+
<xsd:enumeration value="ERROR" />
149+
<xsd:enumeration value="CRITICAL" />
150+
<xsd:enumeration value="ALERT" />
151+
<xsd:enumeration value="EMERGENCY" />
152+
153+
<xsd:enumeration value="100" />
154+
<xsd:enumeration value="200" />
155+
<xsd:enumeration value="250" />
156+
<xsd:enumeration value="300" />
157+
<xsd:enumeration value="400" />
158+
<xsd:enumeration value="500" />
159+
<xsd:enumeration value="550" />
160+
<xsd:enumeration value="600" />
161+
</xsd:restriction>
162+
</xsd:simpleType>
118163
</xsd:schema>

src/Resources/config/services.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,10 @@
8989
<tag name="console.command" />
9090
</service>
9191

92+
<service id="Sentry\Monolog\Handler" class="Sentry\Monolog\Handler">
93+
<argument type="service" id="Sentry\State\HubInterface" />
94+
</service>
95+
9296
<service id="Sentry\SentryBundle\Tracing\Doctrine\DBAL\TracingDriverMiddleware" class="Sentry\SentryBundle\Tracing\Doctrine\DBAL\TracingDriverMiddleware">
9397
<argument type="service" id="Sentry\State\HubInterface" />
9498
</service>

tests/DependencyInjection/ConfigurationTest.php

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
use Doctrine\Bundle\DoctrineBundle\DoctrineBundle;
88
use Jean85\PrettyVersions;
9+
use Monolog\Logger;
910
use PHPUnit\Framework\TestCase;
1011
use Sentry\SentryBundle\DependencyInjection\Configuration;
1112
use Symfony\Bundle\TwigBundle\TwigBundle;
@@ -40,6 +41,13 @@ public function testProcessConfigurationWithDefaultConfiguration(): void
4041
'enabled' => interface_exists(MessageBusInterface::class),
4142
'capture_soft_fails' => true,
4243
],
44+
'monolog' => [
45+
'error_handler' => [
46+
'enabled' => class_exists(Logger::class),
47+
],
48+
'level' => Logger::DEBUG,
49+
'bubble' => true,
50+
],
4351
'tracing' => [
4452
'enabled' => true,
4553
'dbal' => [
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
use Monolog\Logger;
6+
use Symfony\Component\DependencyInjection\ContainerBuilder;
7+
8+
/** @var ContainerBuilder $container */
9+
$container->loadFromExtension('sentry', [
10+
'monolog' => [
11+
'level' => Logger::ERROR,
12+
'bubble' => false,
13+
],
14+
]);
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
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+
'monolog' => [
10+
'error_handler' => false,
11+
],
12+
]);
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
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>
10+
<sentry:monolog level="error" bubble="false" />
11+
</sentry:config>
12+
</container>
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
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>
10+
<sentry:monolog>
11+
<sentry:error-handler enabled="false" />
12+
</sentry:monolog>
13+
</sentry:config>
14+
</container>
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
sentry:
2+
monolog:
3+
level: !php/const Monolog\Logger::ERROR
4+
bubble: false

0 commit comments

Comments
 (0)