Skip to content

Commit fb6c492

Browse files
committed
Merge remote-tracking branch 'agounaris/ag-elasticsearch-handler-type'
2 parents c89c947 + 8a2a6bd commit fb6c492

File tree

4 files changed

+76
-0
lines changed

4 files changed

+76
-0
lines changed

DependencyInjection/Configuration.php

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,15 @@
7171
* - [level]: level name or int value, defaults to DEBUG
7272
* - [bubble]: bool, defaults to true
7373
*
74+
* - elasticsearch:
75+
* - elasticsearch:
76+
* - host: elastic search host name
77+
* - [port]: defaults to 9200
78+
* - [index]: index name, defaults to monolog
79+
* - [index_type]: index_type name, defaults to logs
80+
* - [level]: level name or int value, defaults to DEBUG
81+
* - [bubble]: bool, defaults to true
82+
*
7483
* - fingers_crossed:
7584
* - handler: the wrapped handler's name
7685
* - [action_level|activation_strategy]: minimum level or service id to activate the handler, defaults to WARNING
@@ -374,6 +383,21 @@ public function getConfigTreeBuilder()
374383
->thenInvalid('If you set user, you must provide a password.')
375384
->end()
376385
->end() // mongo
386+
->arrayNode('elasticsearch')
387+
->canBeUnset()
388+
->children()
389+
->scalarNode('host')->end()
390+
->scalarNode('port')->defaultValue(9200)->end()
391+
->scalarNode('index')->defaultValue('monolog')->end()
392+
->scalarNode('index_type')->defaultValue('logs')->end()
393+
->end()
394+
->validate()
395+
->ifTrue(function ($v) {
396+
return !isset($v['host']);
397+
})
398+
->thenInvalid('What must be set is host.')
399+
->end()
400+
->end() // elasticsearch
377401
->arrayNode('config')
378402
->canBeUnset()
379403
->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)