8000 feature #170 remove class parameters (avant1) · symfony/monolog-bundle@079c3d1 · GitHub
[go: up one dir, main page]

Skip to content

Commit 079c3d1

Browse files
committed
feature #170 remove class parameters (avant1)
This PR was squashed before being merged into the 3.x-dev branch (closes #170). Discussion ---------- remove class parameters The idea was initially discussed in symfony/symfony/issues/11881. If I understand things correctly, we should provide a service for each removed parameter to allow bundle users to decorate or override corresponding services. But I'm not sure if services should be listed in DI config of bundle, or it is OK to add them during DI Extension load. I'm using those services to map handler type to handler class (this is done [here](https://github.com/avant1/monolog-bundle/blob/remove-class-parameters/DependencyInjection/MonologExtension.php#L133-L134)). But those handler services can be replaced by hash mapping. If anything else related to this changes should be done (like updating README or adding note to symfony logging cookbook) - I'm ready to work on this too. Commits ------- 6398efc remove class parameters
2 parents 885da32 + 6398efc commit 079c3d1

File tree

5 files changed

+78
-73
lines changed

5 files changed

+78
-73
lines changed

DependencyInjection/Compiler/DebugHandlerPass.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ public function process(ContainerBuilder $container)
4747
return;
4848
}
4949

50-
$debugHandler = new Definition('%monolog.handler.debug.class%', array(Logger::DEBUG, true));
50+
$debugHandler = new Definition('Symfony\Bridge\Monolog\Handler\DebugHandler', array(Logger::DEBUG, true));
5151
$container->setDefinition('monolog.handler.debug', $debugHandler);
5252

5353
foreach ($this->channelPass->getChannels() as $channel) {

DependencyInjection/MonologExtension.php

Lines changed: 55 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,8 @@ public function getNamespace()
130130
private function buildHandler(ContainerBuilder $container, $name, array $handler)
131131
{
132132
$handlerId = $this->getHandlerId($name);
133-
$definition = new Definition(sprintf('%%monolog.handler.%s.class%%', $handler['type']));
133+
$definition = new Definition($this->getHandlerClassByType($handler['type']));
134+
134135
$handler['level'] = $this->levelToMonologConst($handler['level']);
135136

136137
if ($handler['include_stacktraces']) {
@@ -186,13 +187,13 @@ private function buildHandler(ContainerBuilder $container, $name, array $handler
186187
$transport->setPublic(false);
187188
$container->setDefinition($transportId, $transport);
188189

189-
$publisher = new Definition('%monolog.gelfphp.publisher.class%', array());
190+
$publisher = new Definition('Gelf\Publisher', array());
190191
$publisher->addMethodCall('addTransport', array(new Reference($transportId)));
191192
$publisherId = uniqid('monolog.gelf.publisher.', true);
192193
$publisher->setPublic(false);
193194
$container->setDefinition($publisherId, $publisher);
194195
} elseif (class_exists('Gelf\MessagePublisher')) {
195-
$publisher = new Definition('%monolog.gelf.publisher.class%', array(
196+
$publisher = new Definition('Gelf\MessagePublisher', array(
196197
$handler['publisher']['hostname'],
197198
$handler['publisher']['port'],
198199
$handler['publisher']['chunk_size'],
@@ -224,7 +225,7 @@ private function buildHandler(ContainerBuilder $container, $name, array $handler
224225

225226
$server .= $handler['mongo']['host'].':'.$handler['mongo']['port'];
226227

227-
$client = new Definition('%monolog.mongo.client.class%', array(
228+
$client = new Definition('MongoClient', array(
228229
$server,
229230
));
230231

@@ -247,7 +248,7 @@ private function buildHandler(ContainerBuilder $container, $name, array $handler
247248
$clientId = $handler['elasticsearch']['id'];
248249
} else {
249250
// elastica client new definition
250-
$elasticaClient = new Definition('%monolog.elastica.client.class%');
251+
$elasticaClient = new Definition('Elastica\Client');
251252
$elasticaClientArguments = array(
252253
'host' => $handler['elasticsearch']['host'],
253254
'port' => $handler['elasticsearch']['port'],
@@ -320,7 +321,7 @@ private function buildHandler(ContainerBuilder $container, $name, array $handler
320321
if (isset($handler['activation_strategy'])) {
321322
$activation = new Reference($handler['activation_strategy']);
322323
} elseif (!empty($handler['excluded_404s'])) {
323-
$activationDef = new Definition('%monolog.activation_strategy.not_found.class%', array(
324+
$activationDef = new Definition('Symfony\Bridge\Monolog\Handler\FingersCrossed\NotFoundActivationStrategy', array(
324325
new Reference('request_stack'),
325326
$handler['excluded_404s'],
326327
$handler['action_level']
@@ -696,4 +697,52 @@ private function getHandlerId($name)
696697
{
697698
return sprintf('monolog.handler.%s', $name);
698699
}
700+
701+
private function getHandlerClassByType($handlerType)
702+
{
703+
$typeToClassMapping = array(
704+
'stream' => 'Monolog\Handler\StreamHandler',
705+
'console' => 'Symfony\Bridge\Monolog\Handler\ConsoleHandler',
706+
'group' => 'Monolog\Handler\GroupHandler',
707+
'buffer' => 'Monolog\Handler\BufferHandler',
708+
'deduplication' => 'Monolog\Handler\DeduplicationHandler',
709+
'rotating_file' => 'Monolog\Handler\RotatingFileHandler',
710+
'syslog' => 'Monolog\Handler\SyslogHandler',
711+
'syslogudp' => 'Monolog\Handler\SyslogUdpHandler',
712+
'null' => 'Monolog\Handler\NullHandler',
713+
'test' => 'Monolog\Handler\TestHandler',
714+
'gelf' => 'Monolog\Handler\GelfHandler',
715+
'rollbar' => 'Monolog\Handler\RollbarHandler',
716+
'flowdock' => 'Monolog\Handler\FlowdockHandler',
717+
'browser_console' => 'Monolog\Handler\BrowserConsoleHandler',
718+
'firephp' => 'Symfony\Bridge\Monolog\Handler\FirePHPHandler',
719+
'chromephp' => 'Symfony\Bridge\Monolog\Handler\ChromePhpHandler',
720+
'debug' => 'Symfony\Bridge\Monolog\Handler\DebugHandler',
721+
'swift_mailer' => 'Symfony\Bridge\Monolog\Handler\SwiftMailerHandler',
722+
'native_mailer' => 'Monolog\Handler\NativeMailerHandler',
723+
'socket' => 'Monolog\Handler\SocketHandler',
724+
'pushover' => 'Monolog\Handler\PushoverHandler',
725+
'raven' => 'Monolog\Handler\RavenHandler',
726+
'newrelic' => 'Monolog\Handler\NewRelicHandler',
727+
'hipchat' => 'Monolog\Handler\HipChatHandler',
728+
'slack' => 'Monolog\Handler\SlackHandler',
729+
'cube' => 'Monolog\Handler\CubeHandler',
730+
'amqp' => 'Monolog\Handler\AmqpHandler',
731+
'error_log' => 'Monolog\Handler\ErrorLogHandler',
732+
'loggly' => 'Monolog\Handler\LogglyHandler',
733+
'logentries' => 'Monolog\Handler\LogEntriesHandler',
734+
'whatfailuregroup' => 'Monolog\Handler\WhatFailureGroupHandler',
735+
'fingers_crossed' => 'Monolog\Handler\FingersCrossedHandler',
736+
'filter' => 'Monolog\Handler\FilterHandler',
737+
'mongo' => 'Monolog\Handler\MongoDBHandler',
738+
'elasticsearch' => 'Monolog\Handler\ElasticSearchHandler',
739+
);
740+
741+
if (!isset($typeToClassMapping[$handlerType])) {
742+
throw new \InvalidArgumentException(sprintf('There is no handler class defined for handler "%s".', $handlerType));
743+
}
744+
745+
return $typeToClassMapping[$handlerType];
746+
}
747+
699748
}

Resources/config/monolog.xml

Lines changed: 4 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -4,53 +4,6 @@
44
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
55
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
66

7-
<parameters>
8-
<parameter key="monolog.logger.class">Symfony\Bridge\Monolog\Logger</parameter>
9-
<parameter key="monolog.gelf.publisher.class">Gelf\MessagePublisher</parameter>
10-
<parameter key="monolog.gelfphp.publisher.class">Gelf\Publisher</parameter>
11-
<parameter key="monolog.handler.stream.class">Monolog\Handler\StreamHandler</parameter>
12-
<parameter key="monolog.handler.console.class">Symfony\Bridge\Monolog\Handler\ConsoleHandler</parameter>
13-
<parameter key="monolog.handler.group.class">Monolog\Handler\GroupHandler</parameter>
14-
<parameter key="monolog.handler.buffer.class">Monolog\Handler\BufferHandler</parameter>
15-
<parameter key="monolog.handler.deduplication.class">Monolog\Handler\DeduplicationHandler</parameter>
16-
<parameter key="monolog.handler.rotating_file.class">Monolog\Handler\RotatingFileHandler</parameter>
17-
<parameter key="monolog.handler.syslog.class">Monolog\Handler\SyslogHandler</parameter>
18-
<parameter key="monolog.handler.syslogudp.class">Monolog\Handler\SyslogUdpHandler</parameter>
19-
<parameter key="monolog.handler.null.class">Monolog\Handler\NullHandler</parameter>
20-
<parameter key="monolog.handler.test.class">Monolog\Handler\TestHandler</parameter>
21-
<parameter key="monolog.handler.gelf.class">Monolog\Handler\GelfHandler</parameter>
22-
<parameter key="monolog.handler.rollbar.class">Monolog\Handler\RollbarHandler</parameter>
23-
<parameter key="monolog.handler.flowdock.class">Monolog\Handler\FlowdockHandler</parameter>
24-
<parameter key="monolog.handler.browser_console.class">Monolog\Handler\BrowserConsoleHandler</parameter>
25-
<parameter key="monolog.handler.firephp.class">Symfony\Bridge\Monolog\Handler\FirePHPHandler</parameter>
26-
<parameter key="monolog.handler.chromephp.class">Symfony\Bridge\Monolog\Handler\ChromePhpHandler</parameter>
27-
<parameter key="monolog.handler.debug.class">Symfony\Bridge\Monolog\Handler\DebugHandler</parameter>
28-
<parameter key="monolog.handler.swift_mailer.class">Symfony\Bridge\Monolog\Handler\SwiftMailerHandler</parameter>
29-
<parameter key="monolog.handler.native_mailer.class">Monolog\Handler\NativeMailerHandler</parameter>
30-
<parameter key="monolog.handler.socket.class">Monolog\Handler\SocketHandler</parameter>
31-
<parameter key="monolog.handler.pushover.class">Monolog\Handler\PushoverHandler</parameter>
32-
<parameter key="monolog.handler.raven.class">Monolog\Handler\RavenHandler</parameter>
33-
<parameter key="monolog.handler.newrelic.class">Monolog\Handler\NewRelicHandler</parameter>
34-
<parameter key="monolog.handler.hipchat.class">Monolog\Handler\HipChatHandler</parameter>
35-
<parameter key="monolog.handler.slack.class">Monolog\Handler\SlackHandler</parameter>
36-
<parameter key="monolog.handler.cube.class">Monolog\Handler\CubeHandler</parameter>
37-
<parameter key="monolog.handler.amqp.class">Monolog\Handler\AmqpHandler</parameter>
38-
<parameter key="monolog.handler.error_log.class">Monolog\Handler\ErrorLogHandler</parameter>
39-
<parameter key="monolog.handler.loggly.class">Monolog\Handler\LogglyHandler</parameter>
40-
<parameter key="monolog.handler.logentries.class">Monolog\Handler\LogEntriesHandler</parameter>
41-
<parameter key="monolog.handler.whatfailuregroup.class">Monolog\Handler\WhatFailureGroupHandler</parameter>
42-
<parameter key="monolog.activation_strategy.not_found.class">Symfony\Bridge\Monolog\Handler\FingersCrossed\NotFoundActivationStrategy</parameter>
43-
44-
<parameter key="monolog.handler.fingers_crossed.class">Monolog\Handler\FingersCrossedHandler</parameter>
45-
<parameter key="monolog.handler.fingers_crossed.error_level_activation_strategy.class">Monolog\Handler\FingersCrossed\ErrorLevelActivationStrategy</parameter>
46-
<parameter key="monolog.handler.filter.class">Monolog\Handler\FilterHandler</parameter>
47-
<parameter key="monolog.handler.mongo.class">Monolog\Handler\MongoDBHandler</parameter>
48-
<parameter key="monolog.mongo.client.class">MongoClient</parameter>
49-
50-
<parameter key="monolog.handler.elasticsearch.class">Monolog\Handler\ElasticSearchHandler</parameter>
51-
<parameter key="monolog.elastica.client.class">Elastica\Client</parameter>
52-
</parameters>
53-
547
<services>
558
<service id="monolog.logger" parent="monolog.logger_prototype" public="false">
569
<argument index="0">app</argument>
@@ -61,10 +14,13 @@
6114

6215
<service id="logger" alias="monolog.logger" />
6316

64-
<service id="monolog.logger_prototype" class="%monolog.logger.class%" abstract="true">
17+
<service id="monolog.logger_prototype" class="Symfony\Bridge\Monolog\Logger" abstract="true">
6518
<argument /><!-- Channel -->
6619
</service>
6720

21+
<service id="monolog.activation_strategy.not_found" class="Symfony\Bridge\Monolog\Handler\FingersCrossed\NotFoundActivationStrategy"/>
22+
<service id="monolog.handler.fingers_crossed.error_level_activation_strategy" class="Monolog\Handler\FingersCrossed\ErrorLevelActivationStrategy"/>
23+
6824
<!-- Formatters -->
6925
<service id="monolog.formatter.chrome_php" class="Monolog\Formatter\ChromePHPFormatter" public="false" />
7026
<service id="monolog.formatter.gelf_message" class="Monolog\Formatter\GelfMessageFormatter" public="false" />

Tests/DependencyInjection/FixtureMonologExtensionTest.php

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -35,15 +35,15 @@ public function testLoadWithSeveralHandlers()
3535
$this->assertDICDefinitionMethodCallAt(0, $logger, 'useMicrosecondTimestamps', array('%monolog.use_microseconds%'));
3636

3737
$handler = $container->getDefinition('monolog.handler.custom');
38-
$this->assertDICDefinitionClass($handler, '%monolog.handler.stream.class%');
38+
$this->assertDICDefinitionClass($handler, 'Monolog\Handler\StreamHandler');
3939
$this->assertDICConstructorArguments($handler, array('/tmp/symfony.log', \Monolog\Logger::ERROR, false, 0666));
4040

4141
$handler = $container->getDefinition('monolog.handler.main');
42-
$this->assertDICDefinitionClass($handler, '%monolog.handler.fingers_crossed.class%');
42+
$this->assertDICDefinitionClass($handler, 'Monolog\Handler\FingersCrossedHandler');
4343
$this->assertDICConstructorArguments($handler, array(new Reference('monolog.handler.nested'), \Monolog\Logger::ERROR, 0, true, true, \Monolog\Logger::NOTICE));
4444

4545
$handler = $container->getDefinition('monolog.handler.filtered');
46-
$this->assertDICDefinitionClass($handler, '%monolog.handler.filter.class%');
46+
$this->assertDICDefinitionClass($handler, 'Monolog\Handler\FilterHandler');
4747
$this->assertDICConstructorArguments($handler, array(new Reference('monolog.handler.nested2'), array(\Monolog\Logger::WARNING, \Monolog\Logger::ERROR), \Monolog\Logger::EMERGENCY, true));
4848
}
4949

@@ -63,11 +63,11 @@ public function testLoadWithOverwriting()
6363
$this->assertDICDefinitionMethodCallAt(0, $logger, 'useMicrosecondTimestamps', array('%monolog.use_microseconds%'));
6464

6565
$handler = $container->getDefinition('monolog.handler.custom');
66-
$this->assertDICDefinitionClass($handler, '%monolog.handler.stream.class%');
66+
$this->assertDICDefinitionClass($handler, 'Monolog\Handler\StreamHandler');
6767
$this->assertDICConstructorArguments($handler, array('/tmp/symfony.log', \Monolog\Logger::WARNING, true, null));
6868

6969
$handler = $container->getDefinition('monolog.handler.main');
70-
$this->assertDICDefinitionClass($handler, '%monolog.handler.fingers_crossed.class%');
70+
$this->assertDICDefinitionClass($handler, 'Monolog\Handler\FingersCrossedHandler');
7171
$this->assertDICConstructorArguments($handler, array(new Reference('monolog.handler.nested'), \Monolog\Logger::ERROR, 0, true, true, null));
7272
}
7373

@@ -89,7 +89,7 @@ public function testLoadWithNewAtEnd()
8989
$this->assertDICDefinitionMethodCallAt(0, $logger, 'useMicrosecondTimestamps', array('%monolog.use_microseconds%'));
9090

9191
$handler = $container->getDefinition('monolog.handler.new');
92-
$this->assertDICDefinitionClass($handler, '%monolog.handler.stream.class%');
92+
$this->assertDICDefinitionClass($handler, 'Monolog\Handler\StreamHandler');
9393
$this->assertDICConstructorArguments($handler, array('/tmp/monolog.log', \Monolog\Logger::ERROR, true, null));
9494
}
9595

@@ -113,15 +113,15 @@ public function testLoadWithNewAndPriority()
113113
$this->assertDICDefinitionMethodCallAt(0, $logger, 'useMicrosecondTimestamps', array('%monolog.use_microseconds%'));
114114

115115
$handler = $container->getDefinition('monolog.handler.main');
116-
$this->assertDICDefinitionClass($handler, '%monolog.handler.buffer.class%');
116+
$this->assertDICDefinitionClass($handler, 'Monolog\Handler\BufferHandler');
117117
$this->assertDICConstructorArguments($handler, array(new Reference('monolog.handler.nested'), 0, \Monolog\Logger::INFO, true, false));
118118

119119
$handler = $container->getDefinition('monolog.handler.first');
120-
$this->assertDICDefinitionClass($handler, '%monolog.handler.rotating_file.class%');
120+
$this->assertDICDefinitionClass($handler, 'Monolog\Handler\RotatingFileHandler');
121121
$this->assertDICConstructorArguments($handler, array('/tmp/monolog.log', 0, \Monolog\Logger::ERROR, true, null));
122122

123123
$handler = $container->getDefinition('monolog.handler.last');
124-
$this->assertDICDefinitionClass($handler, '%monolog.handler.stream.class%');
124+
$this->assertDICDefinitionClass($handler, 'Monolog\Handler\StreamHandler');
125125
$this->assertDICConstructorArguments($handler, array('/tmp/last.log', \Monolog\Logger::ERROR, true, null));
126126
}
127127

0 commit comments

Comments
 (0)
0