Author: floriansemm
Date: Tue Mar 20 18:35:53 2012
New Revision: 1303074

URL: http://svn.apache.org/viewvc?rev=1303074&view=rev
Log:
LOG4PHP-174 - Firephp appender logs to Firebug console.

Added:
    logging/log4php/trunk/src/main/php/appenders/LoggerAppenderFirephp.php
    logging/log4php/trunk/src/test/php/appenders/LoggerAppenderFirephpTest.php
Modified:
    logging/log4php/trunk/src/main/php/LoggerAutoloader.php

Modified: logging/log4php/trunk/src/main/php/LoggerAutoloader.php
URL: 
http://svn.apache.org/viewvc/logging/log4php/trunk/src/main/php/LoggerAutoloader.php?rev=1303074&r1=1303073&r2=1303074&view=diff
==============================================================================
--- logging/log4php/trunk/src/main/php/LoggerAutoloader.php (original)
+++ logging/log4php/trunk/src/main/php/LoggerAutoloader.php Tue Mar 20 18:35:53 
2012
@@ -63,6 +63,7 @@ class LoggerAutoloader {
                'LoggerAppenderMailEvent' => 
'/appenders/LoggerAppenderMailEvent.php',
                'LoggerAppenderMongoDB' => 
'/appenders/LoggerAppenderMongoDB.php',
                'LoggerAppenderNull' => '/appenders/LoggerAppenderNull.php',
+               'LoggerAppenderFirephp' => 
'/appenders/LoggerAppenderFirephp.php',
                'LoggerAppenderPDO' => '/appenders/LoggerAppenderPDO.php',
                'LoggerAppenderPhp' => '/appenders/LoggerAppenderPhp.php',
                'LoggerAppenderRollingFile' => 
'/appenders/LoggerAppenderRollingFile.php',

Added: logging/log4php/trunk/src/main/php/appenders/LoggerAppenderFirephp.php
URL: 
http://svn.apache.org/viewvc/logging/log4php/trunk/src/main/php/appenders/LoggerAppenderFirephp.php?rev=1303074&view=auto
==============================================================================
--- logging/log4php/trunk/src/main/php/appenders/LoggerAppenderFirephp.php 
(added)
+++ logging/log4php/trunk/src/main/php/appenders/LoggerAppenderFirephp.php Tue 
Mar 20 18:35:53 2012
@@ -0,0 +1,166 @@
+<?php
+
+/**
+ * LoggerAppenderFirephp
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more 
contributor
+ * license agreements. See the NOTICE file distributed with this work for
+ * additional information regarding copyright ownership. The ASF licenses this
+ * file to you under the Apache License, Version 2.0 (the "License"); you may 
not
+ * use this file except in compliance with the License. You may obtain a copy 
of
+ * the License at
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software 
distributed
+ * under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
+ * CONDITIONS OF ANY KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations under the License.
+ *
+ * PHP version 5
+ *
+ * @category  Include
+ * @package   LoggerAppenderFirephp
+ * @author    Bruce Ingalls <Bruce.Ingalls-at-gmail-dot-com>
+ * @copyright 2012 Apache Software Foundation
+ * @license   Apache License, Version 2.0
+ * @version   SVN: $Id:$
+ * @link      
http://sourcemint.com/github.com/firephp/firephp/1:1.0.0b1rc6/-docs/Configuration/Constants
+ * @link      
https://github.com/Seldaek/monolog/blob/master/src/Monolog/Handler/FirePHPHandler.php
+ * @see       LoggerAutoloader.php Update class list
+ * @since     Feb 22, 2012
+ * @internal  CodeSniffs as PEAR style, adapted to Apache. Phpmd clean.
+ * @example   require_once 'FirePHP/Init.php'; //Must be declared before 
log4php
+ * @example   use Monolog/Logger;                              //Alternate to 
firephp lib
+ * @example   use Monolog/Handler/FirePHPHandler;
+ */
+
+/**
+ * Connect Apache Log4php to Insight, the next version of FirePHP
+ * Read the link at sourcemint, to <b>define</b> 4 INSIGHT_* constants in your 
php
+ * config / bootstrap
+ *
+ * @category  Include
+ * @package   LoggerAppenderFirephp
+ * @author    Bruce Ingalls <Bruce.Ingalls-at-gmail-dot-com>
+ * @copyright 2012 Apache Software Foundation
+ * @license   Apache License, Version 2.0
+ * @link      
http://sourcemint.com/github.com/firephp/firephp/1:1.0.0b1rc6/-docs/Configuration/Constants
+ * @example   define('INSIGHT_IPS', '*');              //If using firephp lib
+ * @example   define('INSIGHT_AUTHKEYS', '*');  //weak security (ok for dev 
only)
+ * @example   define('INSIGHT_PATHS', dirname(__FILE__));
+ * @example   define('INSIGHT_SERVER_PATH', '/index.php');
+ */
+class LoggerAppenderFirephp extends LoggerAppender {
+       protected $console;
+       protected $medium;
+
+       /**
+        * Default constructor
+        *
+        * @param string $name Default ''
+        */
+       public function __construct($name = '') {
+               $this->requiresLayout = false;
+               
+               parent::__construct($name);
+       }
+
+       /**
+        * Enable
+        *
+        * @return void
+        */
+       public function activateOptions() {
+               $this->closed = false;
+       }
+
+       /**
+        * Write event object to Log. Defaults to INFO level
+        *
+        * @param LoggerLoggingEvent $event Includes level & message
+        *
+        * @return void
+        */
+       public function append(LoggerLoggingEvent $event) {
+               $console = $this->getConsole();
+               if (null === $console) {
+                       return;         //Silently fail, if FirePHP is 
unavailable
+               }
+
+               $msg = '';
+               if ($this->layout !== null) {
+                       $msg = trim($this->layout->format($event));
+               } else {
+                       $msg = '[' . $event->getLevel()->toString() . '] - ' . 
$event->getRenderedMessage();
+               }
+
+               switch (strtolower($event->getLevel()->toString())) {
+               case 'debug':
+                       $console->trace($msg);  //includes backtrace
+                       break;
+               case 'warn':
+                       $console->debug($msg);
+                       break;
+               case 'error':
+                       $console->warn($msg);
+                       break;
+               case 'fatal':
+                       $console->error($msg);
+                       break;
+               default:
+                       $console->info($msg);
+               }
+       }
+
+       /**
+        * Disable
+        *
+        * @return void
+        */
+       public function close() {
+               $this->closed = true;
+       }
+
+       public function __destruct() {
+               $this->close();
+       }
+
+       /**
+        * Get firephp display object
+        *
+        * @return object null, if FirePHP is unavailable
+        */
+       private function getConsole() {
+               if (isset($this->console)) {
+                       return $this->console;
+               }
+               
+               if (method_exists('FirePHP', 'to')) {
+                       $inspector = FirePHP::to($this->getMedium());
+               
+                       return $inspector->console();
+               }
+               
+               return null;
+       }
+
+       /**
+        * Get medium, typically 'page'
+        *
+        * @return string
+        */
+       public function getMedium() {
+               return $this->medium;
+       }
+
+       /**
+        * Sets medium. Defaults to 'page' for firebug console
+        *
+        * @param string $medium
+        *
+        * @return void
+        */
+       public function setMedium($medium='page') {
+               $this->setString('medium', $medium);
+       }
+
+}

Added: 
logging/log4php/trunk/src/test/php/appenders/LoggerAppenderFirephpTest.php
URL: 
http://svn.apache.org/viewvc/logging/log4php/trunk/src/test/php/appenders/LoggerAppenderFirephpTest.php?rev=1303074&view=auto
==============================================================================
--- logging/log4php/trunk/src/test/php/appenders/LoggerAppenderFirephpTest.php 
(added)
+++ logging/log4php/trunk/src/test/php/appenders/LoggerAppenderFirephpTest.php 
Tue Mar 20 18:35:53 2012
@@ -0,0 +1,198 @@
+<?php
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * @category   tests
+ * @package    log4php
+ * @subpackage appenders
+ * @license    http://www.apache.org/licenses/LICENSE-2.0 Apache License, 
Version 2.0
+ * @version    SVN: $Id$
+ * @link       http://logging.apache.org/log4php
+ * @internal   Phpmd clean.
+ */
+
+require_once('FirePHPCore/FirePHP.class.php');
+
+/**
+ * @group firephp
+ */
+class LoggerAppenderFirephpTest extends PHPUnit_Framework_TestCase {
+
+       private $config = array(
+               'rootLogger' => array(
+                       'appenders' => array('default'),
+               ),
+               'appenders' => array(
+                       'default' => array(
+                               'class' => 'LoggerAppenderFirephp',
+                               'layout' => array(
+                                       'class' => 'LoggerLayoutPattern',
+                               ),
+                               'params' => array('medium' => 'page')
+                       )
+               )
+       );
+
+       public function testRequiresLayout() {
+               $firephp = FirePHP::getInstance(true);
+               
+               $appender = new LoggerAppenderFirephp();
+               self::assertFalse($appender->requiresLayout());
+       }
+
+       public function testSetMedium() {
+               $appender = new LoggerAppenderFirephp();
+               $appender->setMedium('page');
+               self::assertSame('page', $appender->getMedium());
+       }
+
+       private function createEvent($message, $level) {
+               $eventMock = $this->getMock('LoggerLoggingEvent', array(), 
array(), '', false);
+               $eventMock->expects($this->any())
+                                 ->method('getRenderedMessage')
+                                 ->will($this->returnValue($message));
+               
+               $levelMock = $this->getMock('LoggerLevel', array(), array(), 
'', false);
+               $levelMock->expects($this->any())
+                                 ->method('toString')
+                                 ->will($this->returnValue($level));
+               
+               $eventMock->expects($this->any())
+                                 ->method('getLevel')
+                                 ->will($this->returnValue($levelMock));
+               
+               return $eventMock;
+       }
+       
+       public function testAppend_HandleDebug() {
+               $console = new FirePHPSpy();
+               
+               $appender = new TestableLoggerAppenderFirePhp();
+               $appender->setConsole($console);
+               
+               $expectedMessage = 'trace message';
+               $expectedLevel = 'debug';
+               
+               $appender->append($this->createEvent($expectedMessage, 
$expectedLevel));
+               
+               $this->assertLog($console, $expectedMessage, 'debug');
+       }
+       
+       public function testAppend_HandleWarn() {
+               $console = new FirePHPSpy();
+       
+               $appender = new TestableLoggerAppenderFirePhp();
+               $appender->setConsole($console);
+       
+               $expectedMessage = 'debug message';
+               $expectedLevel = 'warn';
+       
+               $appender->append($this->createEvent($expectedMessage, 
$expectedLevel));
+               
+               $this->assertLog($console, $expectedMessage, 'warn');
+       }
+       
+       public function testAppend_HandleError() {
+               $console = new FirePHPSpy();
+       
+               $appender = new TestableLoggerAppenderFirePhp();
+               $appender->setConsole($console);
+       
+               $expectedMessage = 'error message';
+               $expectedLevel = 'error';
+       
+               $appender->append($this->createEvent($expectedMessage, 
$expectedLevel));
+               
+               $this->assertLog($console, $expectedMessage, 'error');
+       }       
+       
+       public function testAppend_HandleFatal() {
+               $console = new FirePHPSpy();
+       
+               $appender = new TestableLoggerAppenderFirePhp();
+               $appender->setConsole($console);
+       
+               $expectedMessage = 'fatal message';
+               $expectedLevel = 'fatal';
+       
+               $appender->append($this->createEvent($expectedMessage, 
$expectedLevel));
+
+               $this->assertLog($console, $expectedMessage, 'fatal');
+       }
+       
+       public function testAppend_HandleDefault() {
+               $console = new FirePHPSpy();
+       
+               $appender = new TestableLoggerAppenderFirePhp();
+               $appender->setConsole($console);
+               
+               $expectedMessage = 'info message';
+               $expectedLevel = 'info';
+       
+               $appender->append($this->createEvent($expectedMessage, 
$expectedLevel));
+       
+               $this->assertLog($console, $expectedMessage, 'info');
+       }
+       
+       public function assertLog($console, $expectedMessage, $logLevel) {
+               $this->assertEquals('['.$logLevel.'] - '.$expectedMessage, 
$console->getMessage());
+               $this->assertEquals(1, $console->getCalls(), 'info wasn\'t 
called once');               
+       }
+}
+
+class TestableLoggerAppenderFirePhp extends LoggerAppenderFirephp {
+       public function setConsole($console) {
+               $this->console = $console;
+       }
+}
+
+class FirePHPSpy {
+       private $calls = 0;
+       private $message = '';
+       
+       public function getCalls() {
+               return $this->calls;
+       }
+       
+       public function getMessage() {
+               return $this->message;
+       }
+       
+       public function trace($message) {
+               $this->calls++;
+               $this->message = $message;
+       }
+       
+       public function debug($message) {
+               $this->calls++;
+               $this->message = $message;              
+       }
+       
+       public function warn($message) {
+               $this->calls++;
+               $this->message = $message;              
+       }
+       
+       public function error($message) {
+               $this->calls++;
+               $this->message = $message;
+       }
+       
+       public function info($message) {
+               $this->calls++;
+               $this->message = $message;
+       }
+}


Reply via email to