Skip to content

Commit 913cb79

Browse files
authored
Merge pull request #471 from Okhoshi/sampling-config
Add configuration support for SamplingHandler
2 parents d14cf79 + f004f27 commit 913cb79

File tree

2 files changed

+17
-2
lines changed

2 files changed

+17
-2
lines changed

DependencyInjection/Configuration.php

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -366,6 +366,10 @@
366366
* - [split_long_messages]: bool, defaults to false, split messages longer than 4096 bytes into multiple messages
367367
* - [delay_between_messages]: bool, defaults to false, adds a 1sec delay/sleep between sending split messages
368368
*
369+
* - sampling:
370+
* - handler: the wrapped handler's name
371+
* - factor: the sampling factor (e.g. 10 means every ~10th record is sampled)
372+
*
369373
* All handlers can also be marked with `nested: true` to make sure they are never added explicitly to the stack
370374
*
371375
* @author Jordi Boggiano <j.boggiano@seld.be>
@@ -591,6 +595,7 @@ public function getConfigTreeBuilder(): TreeBuilder
591595
->booleanNode('disable_notification')->defaultNull()->end() // telegram
592596
->booleanNode('split_long_messages')->defaultFalse()->end() // telegram
593597
->booleanNode('delay_between_messages')->defaultFalse()->end() // telegram
598+
->integerNode('factor')->defaultValue(1)->min(1)->end() // sampling
594599
->arrayNode('tags') // loggly
595600
->beforeNormalization()
596601
->ifString()
@@ -650,8 +655,8 @@ public function getConfigTreeBuilder(): TreeBuilder
650655
->thenInvalid('Service handlers can not have a formatter configured in the bundle, you must reconfigure the service itself instead')
651656
->end()
652657
->validate()
653-
->ifTrue(function ($v) { return ('fingers_crossed' === $v['type'] || 'buffer' === $v['type'] || 'filter' === $v['type']) && empty($v['handler']); })
654-
->thenInvalid('The handler has to be specified to use a FingersCrossedHandler or BufferHandler or FilterHandler')
658+
->ifTrue(function ($v) { return ('fingers_crossed' === $v['type'] || 'buffer' === $v['type'] || 'filter' === $v['type'] || 'sampling' === $v['type']) && empty($v['handler']); })
659+
->thenInvalid('The handler has to be specified to use a FingersCrossedHandler or BufferHandler or FilterHandler or SamplingHandler')
655660
->end()
656661
->validate()
657662
->ifTrue(function ($v) { return 'fingers_crossed' === $v['type'] && !empty($v['excluded_404s']) && !empty($v['activation_strategy']); })

DependencyInjection/MonologExtension.php

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -890,6 +890,15 @@ private function buildHandler(ContainerBuilder $container, $name, array $handler
890890
$handler['bubble'],
891891
]);
892892
break;
893+
case 'sampling':
894+
$nestedHandlerId = $this->getHandlerId($handler['handler']);
895+
$this->markNestedHandler($nestedHandlerId);
896+
897+
$definition->setArguments([
898+
new Reference($nestedHandlerId),
899+
$handler['factor'],
900+
]);
901+
break;
893902

894903
// Handlers using the constructor of AbstractHandler without adding their own arguments
895904
case 'browser_console':
@@ -990,6 +999,7 @@ private function getHandlerClassByType($handlerType)
990999
'redis' => 'Monolog\Handler\RedisHandler',
9911000
'predis' => 'Monolog\Handler\RedisHandler',
9921001
'insightops' => 'Monolog\Handler\InsightOpsHandler',
1002+
'sampling' => 'Monolog\Handler\SamplingHandler',
9931003
];
9941004

9951005
$v2HandlerTypesAdded = [

0 commit comments

Comments
 (0)