Hello! Here is a patch that appends log events to the FirePHP Firefox Extension:
*== Step 1 ==* "Logger.php" file: after line (75) 'LoggerAppenderFile' => '/appenders/ LoggerAppenderFile.php', add new line: (76) 'LoggerAppenderFirePHP' => '/appenders/LoggerAppenderFirePHP.php', *== Step 2 ==* Create "/appenders/LoggerAppenderFirePHP.php" file with code: <?php > > /** > * FirePHP LoggerAppender for log4php. > * > * <p>Appends log events to the FirePHP Firefox Extension.</p> > * <p>The data can be displayed in the Firebug Console or in the > * "Server" request tab.</p> > * > * <p>For more information see: http://www.firephp.org/</p> > * > * <p>Attention: PHP 5 >= 5.2.0 version required.</p> > * > * @author Gayaz Yusipov <gzep at vingrad dot ru> > * @package log4php > * @subpackage appenders > */ > > class LoggerAppenderFirePHP extends LoggerAppender { > > private > /** > * Wildfire protocol message index. > * > * @var integer > * @access private > */ > $index = 1, > > /** > * Comparison of event types. > * <p>Keys are {...@link LoggerLevel}, values are FirePHP levels.</p> > * > * @var array > * @access private > */ > $types = array( > 'TRACE' => 'LOG', > 'DEBUG' => 'LOG', > 'INFO' => 'INFO', > 'WARN' => 'WARN', > 'ERROR' => 'ERROR', > 'FATAL' => 'ERROR' > ); > > public function __construct($name = "") { > > /** > * PHP 5 >= 5.2.0 version required. > */ > if (!function_exists("json_encode")) { > > return $this->close(); > > } > > parent::__construct($name); > $this->requiresLayout = true; > $this->sendHeader("X-Wf-Protocol-1", " > http://meta.wildfirehq.org/Protocol/JsonStream/0.2"); > $this->sendHeader("X-Wf-1-Plugin-1", " > http://meta.firephp.org/Wildfire/Plugin/FirePHP/Library-FirePHPCore/0.3"); > $this->sendHeader("X-Wf-1-Structure-1", " > http://meta.firephp.org/Wildfire/Structure/FirePHP/FirebugConsole/0.1"); > > } > > public function __destruct() { > > $this->close(); > > } > > public function activateOptions() { > > $this->closed = false; > > } > > public function close() { > > $this->closed = true; > > } > > public function append(LoggerLoggingEvent $event) { > > $this->sendHeader("X-Wf-1-1-1-" . $this->index, > $this->encodeEvent($event)); > $this->index++; > > } > > /** > * Send a raw HTTP header. > * > * @param string $name The header name string. > * @param string $value The value name string. > * @return void > */ > private function sendHeader($name, $value) { > > /** > * If headers already sent > */ > if (headers_sent($file, $line)) { > > return $this->close(); > > } > > return header($name . ": " . $value); > > } > > /** > * Encode LOG4PHP event to FirePHP header data. > * > * @param LoggerLoggingEvent $event > * @return string $data > */ > private function encodeEvent(LoggerLoggingEvent $event) { > > $buf = "["; > $locInfo = $event->getLocationInformation(); > > /** > * Put the JSON object containing information about the log message > */ > $buf .= json_encode( > array( > 'Class' => $locInfo->getClassName(), > 'Type' => $this->types[$event->getLevel()->toString()], > 'Function' => $locInfo->getMethodName(), > 'File' => $locInfo->getFileName(), > 'Line' => $locInfo->getLineNumber() > ) > ); > > /** > * Put the actual log message in JSON format > */ > if($this->layout === null) { > $msg = $event->getRenderedMessage(); > } else { > $msg = $this->layout->format($event); > } > $buf .= "," . json_encode($msg) . "]"; > > /** > * strlen($buf) returns the number of bytes between the two | > */ > return strlen($buf) . "|" . $buf . "|"; > > } > > } > > ?> > *== Step 3 ==* Usage: "log4php.cfg.php" file example > return array( > > 'threshold' => 'ALL', > > 'rootLogger' => array( > > 'level' => 'ALL', > 'appenders' => array('default') > > ), > > 'appenders' => array( > > 'default' => array( > > 'class' => 'LoggerAppenderFirePHP', > > 'layout' => array( > > 'class' => 'LoggerLayoutPattern', > 'conversionPattern' => '%d{Y-m-d H:i:s} %p %m in %F at > %L' > > ) > > ) > > ) > > ) Test it! $config = require("log4php.cfg.php"); > require(LOG4PHP_DIR . "Logger.php"); > Logger::configure($config, "LoggerConfiguratorPhp"); > $logger = Logger::getRootLogger(); > > $logger->trace("TRACE");//(Generate FirePHP LOG level) > $logger->debug("DEBUG");//(Generate FirePHP LOG level) > $logger->info("INFO");//(Generate FirePHP INFO level) > $logger->warn("WARN");//(Generate FirePHP WARN level) > $logger->error("ERROR");//(Generate FirePHP ERROR level) > $logger->fatal("FATAL");//(Generate FirePHP ERROR level) > Best regards, Gayaz Yusipov
