Skip to content

Commit 27143f3

Browse files
committed
adding support for elasticsearch
1 parent cff4dc5 commit 27143f3

File tree

4 files changed

+67
-0
lines changed

4 files changed

+67
-0
lines changed

DependencyInjection/Configuration.php

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -374,6 +374,21 @@ public function getConfigTreeBuilder()
374374
->thenInvalid('If you set user, you must provide a password.')
375375
->end()
376376
->end() // mongo
377+
->arrayNode('elasticsearch')
378+
->canBeUnset()
379+
->children()
380+
->scalarNode('host')->end()
381+
->scalarNode('port')->defaultValue(9200)->end()
382+
->scalarNode('index')->defaultValue('monolog')->end()
383+
->scalarNode('index_type')->defaultValue('logs')->end()
384+
->end()
385+
->validate()
386+
->ifTrue(function ($v) {
387+
return !isset($v['host']);
388+
})
389+
->thenInvalid('What must be set is host.')
390+
->end()
391+
->end() // elasticsearch
377392
->arrayNode('config')
378393
->canBeUnset()
379394
->prototype('scalar')->end()

DependencyInjection/MonologExtension.php

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,16 @@
1111

1212
namespace Symfony\Bundle\MonologBundle\DependencyInjection;
1313

14+
use Monolog\Formatter\ElasticaFormatter;
15+
use Monolog\Logger;
1416
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
1517
use Symfony\Component\DependencyInjection\Loader\XmlFileLoader;
1618
use Symfony\Component\DependencyInjection\ContainerBuilder;
1719
use Symfony\Component\Config\FileLocator;
1820
use Symfony\Component\DependencyInjection\Definition;
1921
use Symfony\Component\DependencyInjection\Reference;
2022
use Symfony\Component\DependencyInjection\ContainerInterface;
23+
use Elastica\Client;
2124

2225
/**
2326
* MonologExtension is an extension for the Monolog library.
@@ -229,6 +232,41 @@ private function buildHandler(ContainerBuilder $container, $name, array $handler
229232
));
230233
break;
231234

235+
case 'elasticsearch':
236+
// elastica client new definition
237+
$elasticaClient = new Definition('%monolog.elastica.client.class%');
238+
$elasticaClient->setArguments(array(
239+
array(
240+
'host' => $handler['elasticsearch']['host'],
241+
'port' => $handler['elasticsearch']['port']
242+
)
243+
)
244+
);
245+
$container->setDefinition('monolog.elastica.client', $elasticaClient);
246+
247+
// set parameters for monolog.formatter.elastica service check monolog.xml
248+
$container->setParameter('monolog.elasticsearch.index', $handler['elasticsearch']['index']);
249+
$container->setParameter('monolog.elasticsearch.index_type', $handler['elasticsearch']['index_type']);
250+
251+
// apply tags in case we want to use channels
252+
if (!empty($handler['tags'])) {
253+
foreach ($handler['tags'] as $tag) {
254+
$definition->addTag($tag);
255+
}
256+
}
257+
258+
// elastica handler definition
259+
$definition->setArguments(array(
260+
new Reference('monolog.elastica.client'),
261+
array(
262+
'index' => $handler['elasticsearch']['index'],
263+
'type' => $handler['elasticsearch']['index_type'],
264+
),
265+
$handler['level'],
266+
$handler['bubble']
267+
));
268+
break;
269+
232270
case 'chromephp':
233271
$definition->setArguments(array(
234272
$handler['level'],

Resources/config/monolog.xml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,9 @@
4444
<parameter key="monolog.handler.filter.class">Monolog\Handler\FilterHandler</parameter>
4545
<parameter key="monolog.handler.mongo.class">Monolog\Handler\MongoDBHandler</parameter>
4646
<parameter key="monolog.mongo.client.class">MongoClient</parameter>
47+
48+
<parameter key="monolog.handler.elasticsearch.class">Monolog\Handler\ElasticSearchHandler</parameter>
49+
<parameter key="monolog.elastica.client.class">Elastica\Client</parameter>
4750
</parameters>
4851

4952
<services>
@@ -67,5 +70,9 @@
6770
<service id="monolog.formatter.normalizer" class="Monolog\Formatter\NormalizerFormatter" public="false" />
6871
<service id="monolog.formatter.scalar" class="Monolog\Formatter\ScalarFormatter" public="false" />
6972
<service id="monolog.formatter.wildfire" class="Monolog\Formatter\WildfireFormatter" public="false" />
73+
<service id="monolog.formatter.elastica" class="Monolog\Formatter\ElasticaFormatter" public="false">
74+
<argument index="0">%monolog.elasticsearch.index%</argument>
75+
<argument index="1">%monolog.elasticsearch.index_type%</argument>
76+
</service>
7077
</services>
7178
</container>

Resources/config/schema/monolog-1.0.xsd

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,4 +131,11 @@
131131
<xsd:attribute name="collection" type="xsd:string" />
132132
</xsd:complexType>
133133

134+
<xsd:complexType name="elasticsearch">
135+
<xsd:attribute name="host" type="xsd:string" />
136+
<xsd:attribute name="port" type="xsd:integer" />
137+
<xsd:attribute name="index" type="xsd:string" />
138+
<xsd:attribute name="index_type" type="xsd:string" />
139+
</xsd:complexType>
140+
134141
</xsd:schema>

0 commit comments

Comments
 (0)