You are viewing a plain text version of this content. The canonical link for it is here.
Posted to log4php-dev@logging.apache.org by Gayaz Yusipov <gz...@vingrad.ru> on 2010/07/19 14:55:30 UTC
log4php LoggerAppenderFirePHP patch
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