Skip to content

Commit 13a97b6

Browse files
committed
Add logging (Case 74474)
1 parent e89319a commit 13a97b6

4 files changed

Lines changed: 67 additions & 4 deletions

File tree

Handler/EmbeddedShortcodeHandler.php

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@
22

33
namespace Webfactory\ShortcodeBundle\Handler;
44

5+
use Psr\Log\LoggerInterface;
6+
use Psr\Log\NullLogger;
7+
use Symfony\Component\HttpFoundation\RequestStack;
58
use Symfony\Component\HttpKernel\Controller\ControllerReference;
69
use Symfony\Component\HttpKernel\Fragment\FragmentHandler;
710
use Thunder\Shortcode\Shortcode\ShortcodeInterface;
@@ -22,16 +25,31 @@ class EmbeddedShortcodeHandler
2225
/** @var string */
2326
private $renderer;
2427

28+
/** @var LoggerInterface */
29+
private $logger;
30+
31+
/** @var RequestStack */
32+
private $requestStack;
33+
2534
/**
2635
* @param FragmentHandler $fragmentHandler
2736
* @param string $controllerName
2837
* @param string $renderer
38+
* @param LoggerInterface $logger
39+
* @param RequestStack $requestStack
2940
*/
30-
public function __construct(FragmentHandler $fragmentHandler, $controllerName, $renderer)
31-
{
41+
public function __construct(
42+
FragmentHandler $fragmentHandler,
43+
$controllerName,
44+
$renderer,
45+
LoggerInterface $logger = null,
46+
RequestStack $requestStack
47+
) {
3248
$this->fragmentHandler = $fragmentHandler;
3349
$this->controllerName = $controllerName;
3450
$this->renderer = $renderer;
51+
$this->logger = $logger ?: new NullLogger();
52+
$this->requestStack = $requestStack;
3553
}
3654

3755
/**
@@ -40,6 +58,17 @@ public function __construct(FragmentHandler $fragmentHandler, $controllerName, $
4058
*/
4159
public function __invoke(ShortcodeInterface $shortcode)
4260
{
61+
$this->logger->notice(
62+
'Request {controllerName} with parameters {parameters} and renderer {renderer} to resolve shortcode {shortcode}, triggered by a request to {url}.',
63+
[
64+
'controllerName' => $this->controllerName,
65+
'parameters' => json_encode($shortcode->getParameters()),
66+
'renderer' => $this->renderer,
67+
'shortcode' => $shortcode->getName(),
68+
'url' => $this->requestStack->getMasterRequest()->getRequestUri(),
69+
]
70+
);
71+
4372
return $this->fragmentHandler->render(
4473
new ControllerReference($this->controllerName, $shortcode->getParameters()),
4574
$this->renderer

README.md

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -270,7 +270,36 @@ final class ImageTest extends ShortcodeTest
270270
}
271271
}
272272
```
273-
273+
274+
275+
## Logging
276+
277+
When something goes wrong with the resolving of a shortcode, maybe you not only want to know which shortcode with
278+
which parameters caused the issue (which you can log in your resolving controller), but also which url was called
279+
that embedded the shortcode.
280+
281+
This is tricky is you embed your shortcode controllers via ESI, as the ESI subrequest is in Symfony terms a master
282+
request, preventing you from getting your answer from RequestStack::getMasterRequest(). Hence, the
283+
`EmbedShortcodeHandler` logs with the default monolog handler which controller it will call to resolve the shortcode.
284+
You can overwrite the `EmbedShortcodeHandler`'s logger, e.g. if you want to change the channel, in the service
285+
definition of your shortcode:
286+
287+
```xml
288+
<!-- src/AppBundle/Resources/config/shortcodes.xml -->
289+
<?xml version="1.0" ?>
290+
<container xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://symfony.com/schema/dic/services" xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
291+
<services>
292+
<service parent="webfactory.shortcode.embed_esi_for_shortcode_handler">
293+
<argument index="1">app.controller.embedded_image:showAction</argument>
294+
<tag name="webfactory.shortcode" ... />
295+
...
296+
297+
<argument index="3" type="service" id="monolog.logger.your_channel" />
298+
</service>
299+
</services>
300+
</container>
301+
```
302+
274303

275304
## Credits, Copyright and License
276305

Resources/config/shortcodes.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,17 @@
2121
<argument type="service" id="fragment.handler"/>
2222
<argument><!-- Controller name placeholder argument --></argument>
2323
<argument>esi</argument>
24+
<argument type="service" id="logger" on-invalid="null" />
25+
<argument type="service" id="request_stack" />
2426
</service>
2527

2628
<!-- Base definition for the EmbedForShortcodeHandler with inline renderer. -->
2729
<service abstract="true" id="webfactory.shortcode.embed_inline_for_shortcode_handler" class="Webfactory\ShortcodeBundle\Handler\EmbeddedShortcodeHandler" lazy="true">
2830
<argument type="service" id="fragment.handler"/>
2931
<argument><!-- Controller name placeholder argument --></argument>
3032
<argument>inline</argument>
33+
<argument type="service" id="logger" on-invalid="null" />
34+
<argument type="service" id="request_stack" />
3135
</service>
3236

3337
<!-- Twig extension providing the |shortcodes filter. The content will be passed to the ShortcodeFacade. -->

composer.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@
88
"symfony/dependency-injection": "^3.4.11",
99
"symfony/http-kernel": "^3.4.11",
1010
"symfony/twig-bundle": "^3.4.11",
11-
"thunderer/Shortcode": "^0.6.5"
11+
"thunderer/Shortcode": "^0.6.5",
12+
"psr/log": "^1.0.2"
1213
},
1314

1415
"require-dev": {

0 commit comments

Comments
 (0)