From a82bac49f24516fc7a11cbcc1c20fd4b18b95a74 Mon Sep 17 00:00:00 2001 From: ChristianB Date: Wed, 30 Jan 2013 19:26:25 +0100 Subject: [PATCH] Added ZendMonitor Handler --- src/Monolog/Handler/ZendMonitorHandler.php | 86 +++++++++++++++++++ .../Handler/ZendMonitorHandlerTest.php | 62 +++++++++++++ 2 files changed, 148 insertions(+) create mode 100644 src/Monolog/Handler/ZendMonitorHandler.php create mode 100644 tests/Monolog/Handler/ZendMonitorHandlerTest.php diff --git a/src/Monolog/Handler/ZendMonitorHandler.php b/src/Monolog/Handler/ZendMonitorHandler.php new file mode 100644 index 00000000..0f0fe2b4 --- /dev/null +++ b/src/Monolog/Handler/ZendMonitorHandler.php @@ -0,0 +1,86 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\Logger; + +/** + * Handler sending logs to Zend Monitor + * + * @author Christian Bergau + */ +class ZendMonitorHandler extends AbstractProcessingHandler +{ + /** + * Monolog level / ZendMonitor Custom Event priority map + * + * @var array + */ + protected $levelMap = array( + Logger::DEBUG => 1, + Logger::INFO => 2, + Logger::NOTICE => 3, + Logger::WARNING => 4, + Logger::ERROR => 5, + Logger::CRITICAL => 6, + Logger::ALERT => 7, + Logger::EMERGENCY => 0, + ); + + /** + * Is application running on a zend server? + * + * @var bool + */ + protected $isZendServer = false; + + /** + * Construct + * + * @param int $level + * @param bool $bubble + */ + public function __construct($level = Logger::DEBUG, $bubble = true) + { + $this->isZendServer = function_exists('zend_monitor_custom_event'); + parent::__construct($level, $bubble); + } + + /** + * {@inheritdoc} + */ + protected function write(array $record) + { + if ($this->isZendServer()) { + $this->writeZendMonitorCustomEvent($record); + } + } + + /** + * Write a record to Zend Monitor + * + * @param array $record + */ + protected function writeZendMonitorCustomEvent(array $record) + { + zend_monitor_custom_event($this->levelMap[$record['level']], $record['message'], $record); + } + + /** + * Is Zend Server? + * + * @return bool + */ + public function isZendServer() + { + return $this->isZendServer; + } +} diff --git a/tests/Monolog/Handler/ZendMonitorHandlerTest.php b/tests/Monolog/Handler/ZendMonitorHandlerTest.php new file mode 100644 index 00000000..ed8bdac7 --- /dev/null +++ b/tests/Monolog/Handler/ZendMonitorHandlerTest.php @@ -0,0 +1,62 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\Logger; +use Monolog\TestCase; + +class ZendMonitorHandlerTest extends TestCase +{ + protected $zendMonitorHandler; + + public function setUp() + { + if (!function_exists('zend_monitor_custom_event')) { + $this->markTestSkipped('ZendServer is not installed'); + } + } + + /** + * @covers \Monolog\Handler\ZendMonitor::__construct + * @covers \Monolog\Handler\ZendMonitor::isZendServer + */ + public function testIsZendServerReturnsTrue() + { + $zendMonitor = $this->getMockBuilder('Monolog\Handler\ZendMonitorHandler') + ->setMethods(null) + ->getMock(); + $this->assertTrue($zendMonitor->isZendServer()); + } + + /** + * @covers \Monolog\Handler\ZendMonitor::write + */ + public function testWrite() + { + $zendMonitor = $this->getMockBuilder('Monolog\Handler\ZendMonitorHandler') + ->setMethods(array('writeZendMonitorCustomEvent')) + ->getMock(); + $zendMonitor->expects($this->once()) + ->method('writeZendMonitorCustomEvent'); + $zendMonitor->handle( + array( + 'message' => 'addDebug Message', + 'context' => array(), + 'level' => Logger::DEBUG, + 'level_name' => 'DEBUG', + 'channel' => 'zendmonitor', + 'extra' => array(), + 'formatted' => '[2013-01-30 19:07:32] zendmonitor.DEBUG: addDebug Message [] []' + ) + ); + } + +}