123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206 |
- <?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 layouts
- */
- /**
- * @ignore
- */
- if (!defined('LOG4PHP_DIR')) define('LOG4PHP_DIR', dirname(__FILE__) . '/..');
- define('LOG4PHP_LOGGER_XML_LAYOUT_LOG4J_NS_PREFIX', 'log4j');
- define('LOG4PHP_LOGGER_XML_LAYOUT_LOG4J_NS', 'http://jakarta.apache.org/log4j/');
- define('LOG4PHP_LOGGER_XML_LAYOUT_LOG4PHP_NS_PREFIX', 'log4php');
- define('LOG4PHP_LOGGER_XML_LAYOUT_LOG4PHP_NS', 'http://www.vxr.it/log4php/');
- /**
- */
- require_once(LOG4PHP_DIR . '/helpers/LoggerOptionConverter.php');
- require_once(LOG4PHP_DIR . '/helpers/LoggerTransform.php');
- require_once(LOG4PHP_DIR . '/LoggerLayout.php');
- /**
- * The output of the LoggerXmlLayout consists of a series of log4php:event elements.
- *
- * <p>Parameters: {@link $locationInfo}.</p>
- *
- * <p>It does not output a complete well-formed XML file.
- * The output is designed to be included as an external entity in a separate file to form
- * a correct XML file.</p>
- *
- * @author VxR <vxr@vxr.it>
- * @version $Revision: 1.1 $
- * @package log4php
- * @subpackage layouts
- */
- class LoggerXmlLayout extends LoggerLayout {
- /**
- * The <b>LocationInfo</b> option takes a boolean value. By default,
- * it is set to false which means there will be no location
- * information output by this layout. If the the option is set to
- * true, then the file name and line number of the statement at the
- * origin of the log statement will be output.
- * @var boolean
- */
- var $locationInfo = true;
-
- /**
- * @var boolean set the elements namespace
- */
- var $log4jNamespace = false;
-
-
- /**
- * @var string namespace
- * @private
- */
- var $_namespace = LOG4PHP_LOGGER_XML_LAYOUT_LOG4PHP_NS;
-
- /**
- * @var string namespace prefix
- * @private
- */
- var $_namespacePrefix = LOG4PHP_LOGGER_XML_LAYOUT_LOG4PHP_NS_PREFIX;
-
- /**
- * No options to activate.
- */
- function activateOptions()
- {
- if ($this->getLog4jNamespace()) {
- $this->_namespace = LOG4PHP_LOGGER_XML_LAYOUT_LOG4J_NS;
- $this->_namespacePrefix = LOG4PHP_LOGGER_XML_LAYOUT_LOG4J_NS_PREFIX;
- } else {
- $this->_namespace = LOG4PHP_LOGGER_XML_LAYOUT_LOG4PHP_NS;
- $this->_namespacePrefix = LOG4PHP_LOGGER_XML_LAYOUT_LOG4PHP_NS_PREFIX;
- }
- }
-
- /**
- * @return string
- */
- function getHeader()
- {
- return "<{$this->_namespacePrefix}:eventSet ".
- "xmlns:{$this->_namespacePrefix}=\"{$this->_namespace}\" ".
- "version=\"0.3\" ".
- "includesLocationInfo=\"".($this->getLocationInfo() ? "true" : "false")."\"".
- ">\r\n";
- }
- /**
- * Formats a {@link LoggerLoggingEvent} in conformance with the log4php.dtd.
- *
- * @param LoggerLoggingEvent $event
- * @return string
- */
- function format($event)
- {
- $loggerName = $event->getLoggerName();
- $timeStamp = number_format((float)($event->getTimeStamp() * 1000), 0, '', '');
- $thread = $event->getThreadName();
- $level = $event->getLevel();
- $levelStr = $level->toString();
- $buf = "<{$this->_namespacePrefix}:event logger=\"{$loggerName}\" level=\"{$levelStr}\" thread=\"{$thread}\" timestamp=\"{$timeStamp}\">\r\n";
- $buf .= "<{$this->_namespacePrefix}:message><![CDATA[";
- LoggerTransform::appendEscapingCDATA($buf, $event->getRenderedMessage());
- $buf .= "]]></{$this->_namespacePrefix}:message>\r\n";
- $ndc = $event->getNDC();
- if($ndc != null) {
- $buf .= "<{$this->_namespacePrefix}:NDC><![CDATA[";
- LoggerTransform::appendEscapingCDATA($buf, $ndc);
- $buf .= "]]></{$this->_namespacePrefix}:NDC>\r\n";
- }
- if ($this->getLocationInfo()) {
- $locationInfo = $event->getLocationInformation();
- $buf .= "<{$this->_namespacePrefix}:locationInfo ".
- "class=\"" . $locationInfo->getClassName() . "\" ".
- "file=\"" . htmlentities($locationInfo->getFileName(), ENT_QUOTES) . "\" ".
- "line=\"" . $locationInfo->getLineNumber() . "\" ".
- "method=\"" . $locationInfo->getMethodName() . "\" ";
- $buf .= "/>\r\n";
- }
- $buf .= "</{$this->_namespacePrefix}:event>\r\n\r\n";
-
- return $buf;
- }
-
- /**
- * @return string
- */
- function getFooter()
- {
- return "</{$this->_namespacePrefix}:eventSet>\r\n";
- }
-
- /**
- * @return boolean
- */
- function getLocationInfo()
- {
- return $this->locationInfo;
- }
-
- /**
- * @return boolean
- */
- function getLog4jNamespace()
- {
- return $this->log4jNamespace;
- }
- /**
- * The XMLLayout prints and does not ignore exceptions. Hence the
- * return value <b>false</b>.
- * @return boolean
- */
- function ignoresThrowable()
- {
- return false;
- }
-
- /**
- * The {@link $locationInfo} option takes a boolean value. By default,
- * it is set to false which means there will be no location
- * information output by this layout. If the the option is set to
- * true, then the file name and line number of the statement at the
- * origin of the log statement will be output.
- */
- function setLocationInfo($flag)
- {
- $this->locationInfo = LoggerOptionConverter::toBoolean($flag, true);
- }
-
- /**
- * @param boolean
- */
- function setLog4jNamespace($flag)
- {
- $this->log4jNamespace = LoggerOptionConverter::toBoolean($flag, true);
- }
- }
- ?>
|