From b439707cbb09e04c174c651d6f46417c8c1e4f02 Mon Sep 17 00:00:00 2001 From: Alessandro Nadalin Date: Thu, 23 Aug 2012 00:43:49 +0400 Subject: [PATCH] Added an handler for NewRelic: * implemented a test which verifies that the fallback handler handles records when the NewRelic PHP extension is not installes * implemented the actual handler --- src/Monolog/Handler/NewRelicHandler.php | 49 +++++++++++++++++++ tests/Monolog/Handler/NewRelicHandlerTest.php | 33 +++++++++++++ 2 files changed, 82 insertions(+) create mode 100644 src/Monolog/Handler/NewRelicHandler.php create mode 100644 tests/Monolog/Handler/NewRelicHandlerTest.php diff --git a/src/Monolog/Handler/NewRelicHandler.php b/src/Monolog/Handler/NewRelicHandler.php new file mode 100644 index 00000000..33931822 --- /dev/null +++ b/src/Monolog/Handler/NewRelicHandler.php @@ -0,0 +1,49 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +/** + * Base class for all mail handlers + * + * @author Gyula Sallai + */ +class NewRelicHandler extends AbstractProcessingHandler +{ + protected $fallbackHandler; + + /** + * {@inheritdoc} + */ + protected function write(array $record) + { + if (extension_loaded('newrelic')) { + newrelic_notice_error($record['message']); + + foreach ($record['context'] as $key => $parameter) { + newrelic_add_custom_parameter($key, $parameter); + } + } elseif ($this->fallbackHandler instanceOf AbstractProcessingHandler) { + $this->fallbackHandler->write($record); + } + } + + /** + * Sets the fallback handler to be used to log informations if the New Relic + * extension is not available. + * + * @param Monolog\Handler\AbstractProcessingHandler $handler + */ + public function setFallbackHandler(AbstractProcessingHandler $handler) + { + $this->fallbackHandler = $handler; + } +} diff --git a/tests/Monolog/Handler/NewRelicHandlerTest.php b/tests/Monolog/Handler/NewRelicHandlerTest.php new file mode 100644 index 00000000..b0033380 --- /dev/null +++ b/tests/Monolog/Handler/NewRelicHandlerTest.php @@ -0,0 +1,33 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\TestCase; +use Monolog\Logger; + +class NewRelicHandlerTest extends TestCase +{ + public function testFallbackHandler() + { + $handler = new NewRelicHandler(); + $fallbackHandler = new TestHandler(); + $handler->setFallbackHandler($fallbackHandler); + $record = array( + 'level' => Logger::DEBUG, + 'extra' => array(), + ); + + $handler->handle($record); + + $this->assertCount(1, $fallbackHandler->getRecords()); + } +}