From 9da894a8b3fa64bcd2787114a1ae7a9ed66aaaca Mon Sep 17 00:00:00 2001 From: Dawid Nowak Date: Tue, 1 Jul 2014 20:21:25 +0200 Subject: [PATCH 1/3] WebProcessor: extracted method: appendExtraFields() --- src/Monolog/Processor/WebProcessor.php | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/src/Monolog/Processor/WebProcessor.php b/src/Monolog/Processor/WebProcessor.php index 4c2bc191..59c182b5 100644 --- a/src/Monolog/Processor/WebProcessor.php +++ b/src/Monolog/Processor/WebProcessor.php @@ -46,8 +46,19 @@ class WebProcessor return $record; } - $record['extra'] = array_merge( - $record['extra'], + $record['extra'] = $this->appendExtraFields($record['extra']); + + return $record; + } + + /** + * @param array $extra + * @return array + */ + private function appendExtraFields(array $extra) + { + $extra = array_merge( + $extra, array( 'url' => $this->serverData['REQUEST_URI'], 'ip' => isset($this->serverData['REMOTE_ADDR']) ? $this->serverData['REMOTE_ADDR'] : null, @@ -58,9 +69,9 @@ class WebProcessor ); if (isset($this->serverData['UNIQUE_ID'])) { - $record['extra']['unique_id'] = $this->serverData['UNIQUE_ID']; + $extra['unique_id'] = $this->serverData['UNIQUE_ID']; } - return $record; + return $extra; } } From 9aba3242f6bc322fc0746d9a897c75638611e109 Mon Sep 17 00:00:00 2001 From: Dawid Nowak Date: Tue, 1 Jul 2014 20:25:13 +0200 Subject: [PATCH 2/3] WebProcessor: extra fields appended in a loop over declared values, instead of copy-pasting --- src/Monolog/Processor/WebProcessor.php | 27 ++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/src/Monolog/Processor/WebProcessor.php b/src/Monolog/Processor/WebProcessor.php index 59c182b5..88a9a04c 100644 --- a/src/Monolog/Processor/WebProcessor.php +++ b/src/Monolog/Processor/WebProcessor.php @@ -18,8 +18,22 @@ namespace Monolog\Processor; */ class WebProcessor { + /** + * @var array|\ArrayAccess + */ protected $serverData; + /** + * @var array + */ + protected $extraFields = array( + 'url' => 'REQUEST_URI', + 'ip' => 'REMOTE_ADDR', + 'http_method' => 'REQUEST_METHOD', + 'server' => 'SERVER_NAME', + 'referrer' => 'HTTP_REFERER', + ); + /** * @param mixed $serverData array or object w/ ArrayAccess that provides access to the $_SERVER data */ @@ -57,16 +71,9 @@ class WebProcessor */ private function appendExtraFields(array $extra) { - $extra = array_merge( - $extra, - array( - 'url' => $this->serverData['REQUEST_URI'], - 'ip' => isset($this->serverData['REMOTE_ADDR']) ? $this->serverData['REMOTE_ADDR'] : null, - 'http_method' => isset($this->serverData['REQUEST_METHOD']) ? $this->serverData['REQUEST_METHOD'] : null, - 'server' => isset($this->serverData['SERVER_NAME']) ? $this->serverData['SERVER_NAME'] : null, - 'referrer' => isset($this->serverData['HTTP_REFERER']) ? $this->serverData['HTTP_REFERER'] : null, - ) - ); + foreach ($this->extraFields as $extraName => $serverName) { + $extra[$extraName] = isset($this->serverData[$serverName]) ? $this->serverData[$serverName] : null; + } if (isset($this->serverData['UNIQUE_ID'])) { $extra['unique_id'] = $this->serverData['UNIQUE_ID']; From 6a4b73468e88c9a491700e8805e70f15bfb939e4 Mon Sep 17 00:00:00 2001 From: Dawid Nowak Date: Tue, 1 Jul 2014 20:41:03 +0200 Subject: [PATCH 3/3] WebProcessor: option to add only requested extra fields, instead of always adding all available --- src/Monolog/Processor/WebProcessor.php | 13 +++++++++++-- tests/Monolog/Processor/WebProcessorTest.php | 15 +++++++++++++++ 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/src/Monolog/Processor/WebProcessor.php b/src/Monolog/Processor/WebProcessor.php index 88a9a04c..7021dcf7 100644 --- a/src/Monolog/Processor/WebProcessor.php +++ b/src/Monolog/Processor/WebProcessor.php @@ -35,9 +35,10 @@ class WebProcessor ); /** - * @param mixed $serverData array or object w/ ArrayAccess that provides access to the $_SERVER data + * @param mixed $serverData Array or object w/ ArrayAccess that provides access to the $_SERVER data + * @param array|null $extraFields Extra field names to be added (all available by default) */ - public function __construct($serverData = null) + public function __construct($serverData = null, array $extraFields = null) { if (null === $serverData) { $this->serverData =& $_SERVER; @@ -46,6 +47,14 @@ class WebProcessor } else { throw new \UnexpectedValueException('$serverData must be an array or object implementing ArrayAccess.'); } + + if (null !== $extraFields) { + foreach (array_keys($this->extraFields) as $fieldName) { + if (!in_array($fieldName, $extraFields)) { + unset($this->extraFields[$fieldName]); + } + } + } } /** diff --git a/tests/Monolog/Processor/WebProcessorTest.php b/tests/Monolog/Processor/WebProcessorTest.php index df29fdd6..dba89412 100644 --- a/tests/Monolog/Processor/WebProcessorTest.php +++ b/tests/Monolog/Processor/WebProcessorTest.php @@ -73,6 +73,21 @@ class WebProcessorTest extends TestCase $this->assertFalse(isset($record['extra']['unique_id'])); } + public function testProcessorAddsOnlyRequestedExtraFields() + { + $server = array( + 'REQUEST_URI' => 'A', + 'REMOTE_ADDR' => 'B', + 'REQUEST_METHOD' => 'C', + 'SERVER_NAME' => 'F', + ); + + $processor = new WebProcessor($server, array('url', 'http_method')); + $record = $processor($this->getRecord()); + + $this->assertSame(array('url' => 'A', 'http_method' => 'C'), $record['extra']); + } + /** * @expectedException UnexpectedValueException */