8000 [HttpKernel] sanitized log context in the log data collector · brki/symfony@a1afb99 · GitHub
[go: up one dir, main page]

Skip to content

Commit a1afb99

Browse files
committed
[HttpKernel] sanitized log context in the log data collector
1 parent 1c14010 commit a1afb99

File tree

3 files changed

+64
-23
lines changed

3 files changed

+64
-23
lines changed

src/Symfony/Bridge/Monolog/Handler/DebugHandler.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,11 @@ public function getLogs()
3030
$records = array();
3131
foreach ($this->records as $record) {
3232
$records[] = array(
33-
'timestamp' => $record['datetime']->getTimestamp(),
34-
'message' => $record['message'],
35-
'priority' => $record['level'],
33+
'timestamp' => $record['datetime']->getTimestamp(),
34+
'message' => $record['message'],
35+
'priority' => $record['level'],
3636
'priorityName' => $record['level_name'],
37-
'context' => $record['context'],
37+
'context' => $record['context'],
3838
);
3939
}
4040

src/Symfony/Component/HttpKernel/DataCollector/LoggerDataCollector.php

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ public function collect(Request $request, Response $response, \Exception $except
3939
if (null !== $this->logger) {
4040
$this->data = array(
4141
'error_count' => $this->logger->countErrors(),
42-
'logs' => $this->logger->getLogs(),
42+
'logs' => $this->sanitizeLogs($this->logger->getLogs()),
4343
);
4444
}
4545
}
@@ -73,4 +73,34 @@ public function getName()
7373
{
7474
return 'logger';
7575
}
76+
77+
private function sanitizeLogs($logs)
78+
{
79+
foreach ($logs as $i => $log) {
80+
$logs[$i]['context'] = $this->sanitizeContext($log['context']);
81+
}
82+
83+
return $logs;
84+
}
85+
86+
private function sanitizeContext($context)
87+
{
88+
if (is_array($context)) {
89+
foreach ($context as $key => $value) {
90+
$context[$key] = $this->sanitizeContext($value);
91+
}
92+
93+
return $context;
94+
}
95+
96+
if (is_resource($context)) {
97+
return 'Resource';
98+
}
99+
100+
if (is_object($context)) {
101+
return sprintf('Object(%s)', get_class($context));
102+
}
103+
104+
return $context;
105+
}
76106
}

tests/Symfony/Tests/Component/HttpKernel/DataCollector/LoggerDataCollectorTest.php

Lines changed: 29 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -14,34 +14,45 @@
1414
use Symfony\Component\HttpKernel\DataCollector\LoggerDataCollector;
1515
use Symfony\Component\HttpFoundation\Request;
1616
use Symfony\Component\HttpFoundation\Response;
17-
use Symfony\Component\HttpKernel\Log\DebugLoggerInterface;
1817
use Symfony\Tests\Component\HttpKernel\Logger;
1918

2019
class LoggerDataCollectorTest extends \PHPUnit_Framework_TestCase
2120
{
22-
public function testCollect()
21+
/**
22+
* @dataProvider getCollectTestData
23+
*/
24+
public function testCollect($nb, $logs, $expected)
2325
{
24-
$c = new LoggerDataCollector(new TestLogger());
26+
$logger = $this->getMock('Symfony\Component\HttpKernel\Log\DebugLoggerInterface');
27+
$logger->expects($this->once())->method('countErrors')->will($this->returnValue($nb));
28+
$logger->expects($this->once())->method('getLogs')->will($this->returnValue($logs));
2529

30+
$c = new LoggerDataCollector($logger);
2631
$c->collect(new Request(), new Response());
2732

28-
$this->assertSame('logger',$c->getName());
29-
$this->assertSame(1337,$c->countErrors());
30-
$this->assertSame(array('foo'),$c->getLogs());
33+
$this->assertSame('logger', $c->getName());
34+
$this->assertSame($nb, $c->countErrors());
35+
$this->assertSame($expected ? $expected : $logs, $c->getLogs());
3136
}
3237

33-
}
34-
35-
class TestLogger extends Logger implements DebugLoggerInterface
36-
{
37-
public function countErrors()
38+
public function getCollectTestData()
3839
{
39-
return 1337;
40-
}
41-
42-
public function getLogs($priority = false)
43-
{
44-
return array('foo');
40+
return array(
41+
array(
42+
1,
43+
array(array('message' => 'foo', 'context' => array())),
44+
null,
45+
),
46+
array(
47+
1,
48+
array(array('message' => 'foo', 'context' => array('foo' => fopen(__FILE__, 'r')))),
49+
array(array('message' => 'foo', 'context' => array('foo' => 'Resource'))),
50+
),
51+
array(
52+
1,
53+
array(array('message' => 'foo', 'context' => array('foo' => new \stdClass()))),
54+
array(array('message' => 'foo', 'context' => array('foo' => 'Object(stdClass)'))),
55+
),
56+
);
4557
}
4658
}
47-

0 commit comments

Comments
 (0)
0