fqcn = $fqcn; if($logger instanceof Logger) { $this->logger = $logger; $this->categoryName = $logger->getName(); } else { $this->categoryName = strval($logger); } $this->level = $level; $this->message = $message; if($timeStamp !== null && is_numeric($timeStamp)) { $this->timeStamp = $timeStamp; } else { $this->timeStamp = microtime(true); } if ($throwable !== null && $throwable instanceof Exception) { $this->throwableInfo = new LoggerThrowableInformation($throwable); } } /** * Returns the full qualified classname. * TODO: PHP does contain namespaces in 5.3. Those should be returned too, */ public function getFullQualifiedClassname() { return $this->fqcn; } /** * Set the location information for this logging event. The collected * information is cached for future use. * *
This method uses {@link PHP_MANUAL#debug_backtrace debug_backtrace()} function (if exists) * to collect informations about caller.
*It only recognize informations generated by {@link Logger} and its subclasses.
* @return LoggerLocationInfo */ public function getLocationInformation() { if($this->locationInfo === null) { $locationInfo = array(); $trace = debug_backtrace(); $prevHop = null; // make a downsearch to identify the caller $hop = array_pop($trace); while($hop !== null) { if(isset($hop['class'])) { // we are sometimes in functions = no class available: avoid php warning here $className = strtolower($hop['class']); if(!empty($className) and ($className == 'logger' or strtolower(get_parent_class($className)) == 'logger')) { $locationInfo['line'] = $hop['line']; $locationInfo['file'] = $hop['file']; break; } } $prevHop = $hop; $hop = array_pop($trace); } $locationInfo['class'] = isset($prevHop['class']) ? $prevHop['class'] : 'main'; if(isset($prevHop['function']) and $prevHop['function'] !== 'include' and $prevHop['function'] !== 'include_once' and $prevHop['function'] !== 'require' and $prevHop['function'] !== 'require_once') { $locationInfo['function'] = $prevHop['function']; } else { $locationInfo['function'] = 'main'; } $this->locationInfo = new LoggerLocationInfo($locationInfo, $this->fqcn); } return $this->locationInfo; } /** * Return the level of this event. Use this form instead of directly * accessing the {@link $level} field. * @return LoggerLevel */ public function getLevel() { return $this->level; } /** * Returns the logger which created the event. * @return Logger */ public function getLogger() { return $this->logger; } /** * Return the name of the logger. Use this form instead of directly * accessing the {@link $categoryName} field. * @return string */ public function getLoggerName() { return $this->categoryName; } /** * Return the message for this logging event. * @return mixed */ public function getMessage() { return $this->message; } /** * This method returns the NDC for this event. It will return the * correct content even if the event was generated in a different * thread or even on a different machine. The {@link LoggerNDC::get()} method * should never be called directly. * @return string */ public function getNDC() { if($this->ndcLookupRequired) { $this->ndcLookupRequired = false; $this->ndc = LoggerNDC::get(); } return $this->ndc; } /** * Returns the the context corresponding to thekey
* parameter.
* @return string
*/
public function getMDC($key) {
return LoggerMDC::get($key);
}
/**
* Returns the entire MDC context.
* @return array
*/
public function getMDCMap () {
return LoggerMDC::getMap();
}
/**
* Render message.
* @return string
*/
public function getRenderedMessage() {
if($this->renderedMessage === null and $this->message !== null) {
if(is_string($this->message)) {
$this->renderedMessage = $this->message;
} else {
$rendererMap = Logger::getHierarchy()->getRendererMap();
$this->renderedMessage= $rendererMap->findAndRender($this->message);
}
}
return $this->renderedMessage;
}
/**
* Returns the time when the application started, as a UNIX timestamp
* with microseconds.
* @return float
*/
public static function getStartTime() {
if(!isset(self::$startTime)) {
self::$startTime = microtime(true);
}
return self::$startTime;
}
/**
* @return float
*/
public function getTimeStamp() {
return $this->timeStamp;
}
/**
* Returns the time in seconds passed from the beginning of execution to
* the time the event was constructed.
*
* @return float Seconds with microseconds in decimals.
*/
public function getRelativeTime() {
return $this->timeStamp - self::$startTime;
}
/**
* Returns the time in milliseconds passed from the beginning of execution
* to the time the event was constructed.
*
* @deprecated This method has been replaced by getRelativeTime which
* does not perform unneccesary multiplication and formatting.
*
* @return integer
*/
public function getTime() {
$eventTime = $this->getTimeStamp();
$eventStartTime = LoggerLoggingEvent::getStartTime();
return number_format(($eventTime - $eventStartTime) * 1000, 0, '', '');
}
/**
* @return mixed
*/
public function getThreadName() {
if ($this->threadName === null) {
$this->threadName = (string)getmypid();
}
return $this->threadName;
}
/**
* @return mixed LoggerThrowableInformation
*/
public function getThrowableInformation() {
return $this->throwableInfo;
}
/**
* Serialize this object
* @return string
*/
public function toString() {
serialize($this);
}
/**
* Avoid serialization of the {@link $logger} object
*/
public function __sleep() {
return array(
'fqcn',
'categoryName',
'level',
'ndc',
'ndcLookupRequired',
'message',
'renderedMessage',
'threadName',
'timeStamp',
'locationInfo',
);
}
}
LoggerLoggingEvent::getStartTime();