Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 24 additions & 0 deletions DependencyInjection/Configuration.php
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,15 @@
* - [level]: level name or int value, defaults to DEBUG
* - [bubble]: bool, defaults to true
*
* - elasticsearch:
* - elasticsearch:
* - host: elastic search host name
* - [port]: defaults to 9200
* - [index]: index name, defaults to monolog
* - [index_type]: index_type name, defaults to logs
* - [level]: level name or int value, defaults to DEBUG
* - [bubble]: bool, defaults to true
*
* - fingers_crossed:
* - handler: the wrapped handler's name
* - [action_level|activation_strategy]: minimum level or service id to activate the handler, defaults to WARNING
Expand Down Expand Up @@ -374,6 +383,21 @@ public function getConfigTreeBuilder()
->thenInvalid('If you set user, you must provide a password.')
->end()
->end() // mongo
->arrayNode('elasticsearch')
->canBeUnset()
->children()
->scalarNode('host')->end()
->scalarNode('port')->defaultValue(9200)->end()
->scalarNode('index')->defaultValue('monolog')->end()
->scalarNode('index_type')->defaultValue('logs')->end()
->end()
->validate()
->ifTrue(function ($v) {
return !isset($v['host']);
})
->thenInvalid('What must be set is host.')
->end()
->end() // elasticsearch
->arrayNode('config')
->canBeUnset()
->prototype('scalar')->end()
Expand Down
38 changes: 38 additions & 0 deletions DependencyInjection/MonologExtension.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,16 @@

namespace Symfony\Bundle\MonologBundle\DependencyInjection;

use Monolog\Formatter\ElasticaFormatter;
use Monolog\Logger;
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
use Symfony\Component\DependencyInjection\Loader\XmlFileLoader;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\Config\FileLocator;
use Symfony\Component\DependencyInjection\Definition;
use Symfony\Component\DependencyInjection\Reference;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Elastica\Client;

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

case 'elasticsearch':
// elastica client new definition
$elasticaClient = new Definition('%monolog.elastica.client.class%');
$elasticaClient->setArguments(array(
array(
'host' => $handler['elasticsearch']['host'],
'port' => $handler['elasticsearch']['port']
)
)
);
$container->setDefinition('monolog.elastica.client', $elasticaClient);

// set parameters for monolog.formatter.elastica service check monolog.xml
$container->setParameter('monolog.elasticsearch.index', $handler['elasticsearch']['index']);
$container->setParameter('monolog.elasticsearch.index_type', $handler['elasticsearch']['index_type']);

// apply tags in case we want to use channels
if (!empty($handler['tags'])) {
foreach ($handler['tags'] as $tag) {
$definition->addTag($tag);
}
}

// elastica handler definition
$definition->setArguments(array(
new Reference('monolog.elastica.client'),
array(
'index' => $handler['elasticsearch']['index'],
'type' => $handler['elasticsearch']['index_type'],
),
$handler['level'],
$handler['bubble']
));
break;

case 'chromephp':
$definition->setArguments(array(
$handler['level'],
Expand Down
7 changes: 7 additions & 0 deletions Resources/config/monolog.xml
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,9 @@
<parameter key="monolog.handler.filter.class">Monolog\Handler\FilterHandler</parameter>
<parameter key="monolog.handler.mongo.class">Monolog\Handler\MongoDBHandler</parameter>
<parameter key="monolog.mongo.client.class">MongoClient</parameter>

<parameter key="monolog.handler.elasticsearch.class">Monolog\Handler\ElasticSearchHandler</parameter>
<parameter key="monolog.elastica.client.class">Elastica\Client</parameter>
</parameters>

<services>
Expand All @@ -67,5 +70,9 @@
<service id="monolog.formatter.normalizer" class="Monolog\Formatter\NormalizerFormatter" public="false" />
<service id="monolog.formatter.scalar" class="Monolog\Formatter\ScalarFormatter" public="false" />
<service id="monolog.formatter.wildfire" class="Monolog\Formatter\WildfireFormatter" public="false" />
<service id="monolog.formatter.elastica" class="Monolog\Formatter\ElasticaFormatter" public="false">
<argument index="0">%monolog.elasticsearch.index%</argument>
<argument index="1">%monolog.elasticsearch.index_type%</argument>
</service>
</services>
</container>
7 changes: 7 additions & 0 deletions Resources/config/schema/monolog-1.0.xsd
Original file line number Diff line number Diff line change
Expand Up @@ -131,4 +131,11 @@
<xsd:attribute name="collection" type="xsd:string" />
</xsd:complexType>

<xsd:complexType name="elasticsearch">
<xsd:attribute name="host" type="xsd:string" />
<xsd:attribute name="port" type="xsd:integer" />
<xsd:attribute name="index" type="xsd:string" />
<xsd:attribute name="index_type" type="xsd:string" />
</xsd:complexType>

</xsd:schema>