Skip to content

Commit 6a815ec

Browse files
authored
Merge pull request #8 from OpenTagOS/feature/exception-listener
Feature: Exception listener
2 parents 5a49ee0 + 0736644 commit 6a815ec

File tree

3 files changed

+67
-0
lines changed

3 files changed

+67
-0
lines changed

src/Bridge/ExceptionListener.php

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
<?php
2+
declare(strict_types=1);
3+
4+
namespace Jaeger\Symfony\Bridge;
5+
6+
use Jaeger\Log\ErrorLog;
7+
use Jaeger\Span\SpanAwareInterface;
8+
use Jaeger\Tag\ErrorTag;
9+
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
10+
use Symfony\Component\HttpKernel\Event\ExceptionEvent;
11+
12+
class ExceptionListener implements EventSubscriberInterface
13+
{
14+
private $spanManager;
15+
16+
public function __construct(SpanAwareInterface $spanManager)
17+
{
18+
$this->spanManager = $spanManager;
19+
}
20+
21+
public static function getSubscribedEvents(): array
22+
{
23+
return [
24+
ExceptionEvent::class => ['onKernelException', 0],
25+
];
26+
}
27+
28+
public function onKernelException(ExceptionEvent $event): void
29+
{
30+
$span = $this->spanManager->getSpan();
31+
32+
if (null === $span) {
33+
return;
34+
}
35+
36+
$exception = $event->getThrowable();
37+
38+
$span
39+
->addTag(new ErrorTag())
40+
->addLog(new ErrorLog($exception->getMessage(), $exception->getTraceAsString()))
41+
;
42+
}
43+
}

src/Bridge/RequestSpanListener.php

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,15 @@
66
use Jaeger\Http\HttpCodeTag;
77
use Jaeger\Http\HttpMethodTag;
88
use Jaeger\Http\HttpUriTag;
9+
use Jaeger\Log\ErrorLog;
910
use Jaeger\Symfony\Name\Generator\NameGeneratorInterface;
1011
use Jaeger\Symfony\Tag\SymfonyComponentTag;
1112
use Jaeger\Symfony\Tag\SymfonyVersionTag;
13+
use Jaeger\Tag\ErrorTag;
1214
use Jaeger\Tag\SpanKindServerTag;
1315
use Jaeger\Tracer\TracerInterface;
1416
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
17+
use Symfony\Component\HttpKernel\Event\ExceptionEvent;
1518
use Symfony\Component\HttpKernel\Event\RequestEvent;
1619
use Symfony\Component\HttpKernel\Event\ResponseEvent;
1720
use Symfony\Component\HttpKernel\HttpKernelInterface;
@@ -36,6 +39,7 @@ public static function getSubscribedEvents(): array
3639
return [
3740
RequestEvent::class => ['onRequest', 29],
3841
ResponseEvent::class => ['onResponse', -1024],
42+
ExceptionEvent::class => ['onKernelException', 0],
3943
];
4044
}
4145

@@ -69,4 +73,18 @@ public function onRequest(RequestEvent $event): void
6973
)
7074
);
7175
}
76+
77+
public function onKernelException(ExceptionEvent $event): void
78+
{
79+
if ($this->spans->isEmpty()) {
80+
return;
81+
}
82+
83+
$exception = $event->getThrowable();
84+
85+
$this->spans->current()
86+
->addTag(new ErrorTag())
87+
->addLog(new ErrorLog($exception->getMessage(), $exception->getTraceAsString()))
88+
;
89+
}
7290
}

src/Resources/services.yml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,3 +189,9 @@ services:
189189
arguments: ['@jaeger.span.handler.background', '@jaeger.span.handler.gloabal']
190190
tags:
191191
- {name: 'kernel.event_subscriber' }
192+
jaeger.exception.listener:
193+
class: Jaeger\Symfony\Bridge\ExceptionListener
194+
arguments:
195+
- '@jaeger.span.manager'
196+
tags:
197+
- {name: 'kernel.event_subscriber'}

0 commit comments

Comments
 (0)