123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504 |
- <?php
- /**
- * log4php is a PHP port of the log4j java logging package.
- *
- * <p>This framework is based on log4j (see {@link http://jakarta.apache.org/log4j log4j} for details).</p>
- * <p>Design, strategies and part of the methods documentation are developed by log4j team
- * (Ceki Gülcü as log4j project founder and
- * {@link http://jakarta.apache.org/log4j/docs/contributors.html contributors}).</p>
- *
- * <p>PHP port, extensions and modifications by VxR. All rights reserved.<br>
- * For more information, please see {@link http://www.vxr.it/log4php/}.</p>
- *
- * <p>This software is published under the terms of the LGPL License
- * a copy of which has been included with this distribution in the LICENSE file.</p>
- *
- * @package log4php
- * @subpackage helpers
- */
- /**
- * @ignore
- */
- if (!defined('LOG4PHP_DIR')) define('LOG4PHP_DIR', dirname(__FILE__) . '/..');
- /**
- */
- require_once(LOG4PHP_DIR . '/LoggerLog.php');
- /**
- * Array for fast space padding
- * Used by {@link LoggerPatternConverter::spacePad()}.
- */
- $GLOBALS['log4php.LoggerPatternConverter.spaces'] = array(" ", " ", " ", " ", //1,2,4,8 spaces
- " ", // 16 spaces
- " " ); // 32 spaces
- /**
- * LoggerPatternConverter is an abstract class that provides the formatting
- * functionality that derived classes need.
- *
- * <p>Conversion specifiers in a conversion patterns are parsed to
- * individual PatternConverters. Each of which is responsible for
- * converting a logging event in a converter specific manner.</p>
- *
- * @author VxR <vxr@vxr.it>
- * @version $Revision: 1.1 $
- * @package log4php
- * @subpackage helpers
- * @abstract
- * @since 0.3
- */
- class LoggerPatternConverter {
- /**
- * @var LoggerPatternConverter next converter in converter chain
- */
- var $next = null;
-
- var $min = -1;
- var $max = 0x7FFFFFFF;
- var $leftAlign = false;
- /**
- * Constructor
- *
- * @param LoggerFormattingInfo $fi
- */
- function LoggerPatternConverter($fi = null)
- {
- if ($fi !== null) {
- $this->min = $fi->min;
- $this->max = $fi->max;
- $this->leftAlign = $fi->leftAlign;
- }
- }
-
- /**
- * Derived pattern converters must override this method in order to
- * convert conversion specifiers in the correct way.
- *
- * @param LoggerLoggingEvent $event
- */
- function convert($event) {}
- /**
- * A template method for formatting in a converter specific way.
- *
- * @param string &$sbuf string buffer
- * @param LoggerLoggingEvent $e
- */
- function format(&$sbuf, $e)
- {
- LoggerLog::debug("LoggerPatternConverter::format() sbuf='$sbuf'");
-
- $s = $this->convert($e);
-
- LoggerLog::debug("LoggerPatternConverter::format() converted event is '$s'");
-
-
- if($s == null or empty($s)) {
- if(0 < $this->min)
- $this->spacePad($sbuf, $this->min);
- return;
- }
-
- $len = strlen($s);
-
- if($len > $this->max) {
- $sbuf .= substr($s , 0, ($len - $this->max));
- } elseif($len < $this->min) {
- if($this->leftAlign) {
- $sbuf .= $s;
- $this->spacePad($sbuf, ($this->min - $len));
- } else {
- $this->spacePad($sbuf, ($this->min - $len));
- $sbuf .= $s;
- }
- } else {
- $sbuf .= $s;
- }
- }
- /**
- * Fast space padding method.
- *
- * @param string &$sbuf string buffer
- * @param integer $length pad length
- *
- * @todo reimplement using PHP string functions
- */
- function spacePad(&$sbuf, $length)
- {
- LoggerLog::debug("LoggerPatternConverter::spacePad() sbuf='$sbuf' len='$length'");
-
- while($length >= 32) {
- $sbuf .= $GLOBALS['log4php.LoggerPatternConverter.spaces'][5];
- $length -= 32;
- }
-
- for($i = 4; $i >= 0; $i--) {
- if(($length & (1<<$i)) != 0) {
- $sbuf .= $GLOBALS['log4php.LoggerPatternConverter.spaces'][$i];
- }
- }
- // $sbuf = str_pad($sbuf, $length);
- }
- }
- // ---------------------------------------------------------------------
- // PatternConverters
- // ---------------------------------------------------------------------
- /**
- * @author VxR <vxr@vxr.it>
- * @package log4php
- * @subpackage helpers
- */
- class LoggerBasicPatternConverter extends LoggerPatternConverter {
- /**
- * @var integer
- */
- var $type;
- /**
- * Constructor
- *
- * @param string $formattingInfo
- * @param integer $type
- */
- function LoggerBasicPatternConverter($formattingInfo, $type)
- {
- LoggerLog::debug("LoggerBasicPatternConverter::LoggerBasicPatternConverter() type='$type'");
-
- $this->LoggerPatternConverter($formattingInfo);
- $this->type = $type;
- }
- /**
- * @param LoggerLoggingEvent $event
- * @return string
- */
- function convert($event)
- {
- switch($this->type) {
- case LOG4PHP_LOGGER_PATTERN_PARSER_RELATIVE_TIME_CONVERTER:
- $timeStamp = $event->getTimeStamp();
- $startTime = LoggerLoggingEvent::getStartTime();
- return (string)(int)($timeStamp * 1000 - $startTime * 1000);
-
- case LOG4PHP_LOGGER_PATTERN_PARSER_THREAD_CONVERTER:
- return $event->getThreadName();
- case LOG4PHP_LOGGER_PATTERN_PARSER_LEVEL_CONVERTER:
- $level = $event->getLevel();
- return $level->toString();
- case LOG4PHP_LOGGER_PATTERN_PARSER_NDC_CONVERTER:
- return $event->getNDC();
- case LOG4PHP_LOGGER_PATTERN_PARSER_MESSAGE_CONVERTER:
- return $event->getRenderedMessage();
-
- default:
- return '';
- }
- }
- }
- /**
- * @author VxR <vxr@vxr.it>
- * @package log4php
- * @subpackage helpers
- */
- class LoggerLiteralPatternConverter extends LoggerPatternConverter {
-
- /**
- * @var string
- */
- var $literal;
- /**
- * Constructor
- *
- * @param string $value
- */
- function LoggerLiteralPatternConverter($value)
- {
- LoggerLog::debug("LoggerLiteralPatternConverter::LoggerLiteralPatternConverter() value='$value'");
-
- $this->literal = $value;
- }
- /**
- * @param string &$sbuf
- * @param LoggerLoggingEvent $event
- */
- function format(&$sbuf, $event)
- {
- $sbuf .= $this->literal;
- }
- /**
- * @param LoggerLoggingEvent $event
- * @return string
- */
- function convert($event)
- {
- return $this->literal;
- }
- }
- /**
- * @author VxR <vxr@vxr.it>
- * @package log4php
- * @subpackage helpers
- */
- class LoggerDatePatternConverter extends LoggerPatternConverter {
- /**
- * @var string
- */
- var $df;
-
- /**
- * Constructor
- *
- * @param string $formattingInfo
- * @param string $df
- */
- function LoggerDatePatternConverter($formattingInfo, $df)
- {
- LoggerLog::debug("LoggerDatePatternConverter::LoggerDatePatternConverter() dateFormat='$df'");
-
- $this->LoggerPatternConverter($formattingInfo);
- $this->df = $df;
- }
- /**
- * @param LoggerLoggingEvent $event
- * @return string
- */
- function convert($event)
- {
- $timeStamp = $event->getTimeStamp();
- $usecs = round(($timeStamp - (int)$timeStamp) * 1000);
- $this->df = str_replace("\u", "u", ereg_replace("[^\\]u", sprintf(',%03d', $usecs), $this->df));
-
- return date($this->df, $event->getTimeStamp());
-
- }
- }
- /**
- * @author VxR <vxr@vxr.it>
- * @package log4php
- * @subpackage helpers
- */
- class LoggerMDCPatternConverter extends LoggerPatternConverter {
- /**
- * @var string
- */
- var $key;
- /**
- * Constructor
- *
- * @param string $formattingInfo
- * @param string $key
- */
- function LoggerMDCPatternConverter($formattingInfo, $key)
- {
- LoggerLog::debug("LoggerMDCPatternConverter::LoggerMDCPatternConverter() key='$key'");
- $this->LoggerPatternConverter($formattingInfo);
- $this->key = $key;
- }
- /**
- * @param LoggerLoggingEvent $event
- * @return string
- */
- function convert($event)
- {
- return $event->getMDC($this->key);
- }
- }
- /**
- * @author VxR <vxr@vxr.it>
- * @package log4php
- * @subpackage helpers
- */
- class LoggerLocationPatternConverter extends LoggerPatternConverter {
-
- /**
- * @var integer
- */
- var $type;
- /**
- * Constructor
- *
- * @param string $formattingInfo
- * @param integer $type
- */
- function LoggerLocationPatternConverter($formattingInfo, $type)
- {
- LoggerLog::debug("LoggerLocationPatternConverter::LoggerLocationPatternConverter() type='$type'");
-
- $this->LoggerPatternConverter($formattingInfo);
- $this->type = $type;
- }
- /**
- * @param LoggerLoggingEvent $event
- * @return string
- */
- function convert($event)
- {
- $locationInfo = $event->getLocationInformation();
- switch($this->type) {
- case LOG4PHP_LOGGER_PATTERN_PARSER_FULL_LOCATION_CONVERTER:
- return $locationInfo->fullInfo;
- case LOG4PHP_LOGGER_PATTERN_PARSER_METHOD_LOCATION_CONVERTER:
- return $locationInfo->getMethodName();
- case LOG4PHP_LOGGER_PATTERN_PARSER_LINE_LOCATION_CONVERTER:
- return $locationInfo->getLineNumber();
- case LOG4PHP_LOGGER_PATTERN_PARSER_FILE_LOCATION_CONVERTER:
- return $locationInfo->getFileName();
- default:
- return '';
- }
- }
- }
- /**
- * @author VxR <vxr@vxr.it>
- * @package log4php
- * @subpackage helpers
- * @abstract
- */
- class LoggerNamedPatternConverter extends LoggerPatternConverter {
- /**
- * @var integer
- */
- var $precision;
- /**
- * Constructor
- *
- * @param string $formattingInfo
- * @param integer $precision
- */
- function LoggerNamedPatternConverter($formattingInfo, $precision)
- {
- LoggerLog::debug("LoggerNamedPatternConverter::LoggerNamedPatternConverter() precision='$precision'");
-
- $this->LoggerPatternConverter($formattingInfo);
- $this->precision = $precision;
- }
- /**
- * @param LoggerLoggingEvent $event
- * @return string
- * @abstract
- */
- function getFullyQualifiedName($event)
- {
- // abstract
- return;
- }
- /**
- * @param LoggerLoggingEvent $event
- * @return string
- */
- function convert($event)
- {
- $n = $this->getFullyQualifiedName($event);
- if ($this->precision <= 0) {
- return $n;
- } else {
- $len = strlen($n);
-
- // We substract 1 from 'len' when assigning to 'end' to avoid out of
- // bounds exception in return r.substring(end+1, len). This can happen if
- // precision is 1 and the category name ends with a dot.
- $end = $len -1 ;
- for($i = $this->precision; $i > 0; $i--) {
- $end = strrpos(substr($n, 0, ($end - 1)), '.');
- if ($end == false)
- return $n;
- }
- return substr($n, ($end + 1), $len);
- }
- }
- }
- /**
- * @author VxR <vxr@vxr.it>
- * @package log4php
- * @subpackage helpers
- */
- class LoggerClassNamePatternConverter extends LoggerNamedPatternConverter {
- /**
- * Constructor
- *
- * @param string $formattingInfo
- * @param integer $precision
- */
- function LoggerClassNamePatternConverter($formattingInfo, $precision)
- {
- LoggerLog::debug("LoggerClassNamePatternConverter::LoggerClassNamePatternConverter() precision='$precision'");
-
- $this->LoggerNamedPatternConverter($formattingInfo, $precision);
- }
- /**
- * @param LoggerLoggingEvent $event
- * @return string
- */
- function getFullyQualifiedName($event)
- {
- return $event->fqcn;
- }
- }
- /**
- * @author VxR <vxr@vxr.it>
- * @package log4php
- * @subpackage helpers
- */
- class LoggerCategoryPatternConverter extends LoggerNamedPatternConverter {
- /**
- * Constructor
- *
- * @param string $formattingInfo
- * @param integer $precision
- */
- function LoggerCategoryPatternConverter($formattingInfo, $precision)
- {
- LoggerLog::debug("LoggerCategoryPatternConverter::LoggerCategoryPatternConverter() precision='$precision'");
-
- $this->LoggerNamedPatternConverter($formattingInfo, $precision);
- }
- /**
- * @param LoggerLoggingEvent $event
- * @return string
- */
- function getFullyQualifiedName($event)
- {
- return $event->getLoggerName();
- }
- }
- ?>
|