loggerpatternparser.php.svn-base
来自「PHP 知识管理系统(基于树结构的知识管理系统), 英文原版的PHP源码。」· SVN-BASE 代码 · 共 409 行 · 第 1/2 页
SVN-BASE
409 行
<?php/** * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * * @package log4php * @subpackage helpers *//** * @ignore */if (!defined('LOG4PHP_DIR')) define('LOG4PHP_DIR', dirname(__FILE__) . '/..');if (!defined('LOG4PHP_LINE_SEP')) { if (substr(php_uname(), 0, 7) == "Windows") { /** * @ignore */ define('LOG4PHP_LINE_SEP', "\r\n"); } else { /** * @ignore */ define('LOG4PHP_LINE_SEP', "\n"); }} /** */require_once(LOG4PHP_DIR . '/helpers/LoggerFormattingInfo.php');require_once(LOG4PHP_DIR . '/helpers/LoggerPatternConverter.php');require_once(LOG4PHP_DIR . '/LoggerLog.php');define('LOG4PHP_LOGGER_PATTERN_PARSER_ESCAPE_CHAR', '%');define('LOG4PHP_LOGGER_PATTERN_PARSER_LITERAL_STATE', 0);define('LOG4PHP_LOGGER_PATTERN_PARSER_CONVERTER_STATE', 1);define('LOG4PHP_LOGGER_PATTERN_PARSER_MINUS_STATE', 2);define('LOG4PHP_LOGGER_PATTERN_PARSER_DOT_STATE', 3);define('LOG4PHP_LOGGER_PATTERN_PARSER_MIN_STATE', 4);define('LOG4PHP_LOGGER_PATTERN_PARSER_MAX_STATE', 5);define('LOG4PHP_LOGGER_PATTERN_PARSER_FULL_LOCATION_CONVERTER', 1000);define('LOG4PHP_LOGGER_PATTERN_PARSER_METHOD_LOCATION_CONVERTER', 1001);define('LOG4PHP_LOGGER_PATTERN_PARSER_CLASS_LOCATION_CONVERTER', 1002);define('LOG4PHP_LOGGER_PATTERN_PARSER_FILE_LOCATION_CONVERTER', 1003);define('LOG4PHP_LOGGER_PATTERN_PARSER_LINE_LOCATION_CONVERTER', 1004);define('LOG4PHP_LOGGER_PATTERN_PARSER_RELATIVE_TIME_CONVERTER', 2000);define('LOG4PHP_LOGGER_PATTERN_PARSER_THREAD_CONVERTER', 2001);define('LOG4PHP_LOGGER_PATTERN_PARSER_LEVEL_CONVERTER', 2002);define('LOG4PHP_LOGGER_PATTERN_PARSER_NDC_CONVERTER', 2003);define('LOG4PHP_LOGGER_PATTERN_PARSER_MESSAGE_CONVERTER', 2004);define('LOG4PHP_LOGGER_PATTERN_PARSER_DATE_FORMAT_ISO8601', 'Y-m-d H:i:s,u'); define('LOG4PHP_LOGGER_PATTERN_PARSER_DATE_FORMAT_ABSOLUTE', 'H:i:s');define('LOG4PHP_LOGGER_PATTERN_PARSER_DATE_FORMAT_DATE', 'd M Y H:i:s,u');/** * Most of the work of the {@link LoggerPatternLayout} class * is delegated to the {@link LoggerPatternParser} class. * * <p>It is this class that parses conversion patterns and creates * a chained list of {@link LoggerPatternConverter} converters.</p> * * @author Marco Vassura * @version $Revision: 635069 $ * @package log4php * @subpackage helpers * * @since 0.3 */class LoggerPatternParser { var $state; var $currentLiteral; var $patternLength; var $i; /** * @var LoggerPatternConverter */ var $head = null; /** * @var LoggerPatternConverter */ var $tail = null; /** * @var LoggerFormattingInfo */ var $formattingInfo; /** * @var string pattern to parse */ var $pattern; /** * Constructor * * @param string $pattern */ function LoggerPatternParser($pattern) { LoggerLog::debug("LoggerPatternParser::LoggerPatternParser() pattern='$pattern'"); $this->pattern = $pattern; $this->patternLength = strlen($pattern); $this->formattingInfo = new LoggerFormattingInfo(); $this->state = LOG4PHP_LOGGER_PATTERN_PARSER_LITERAL_STATE; } /** * @param LoggerPatternConverter $pc */ function addToList($pc) { // LoggerLog::debug("LoggerPatternParser::addToList()"); if($this->head == null) { $this->head = $pc; $this->tail =& $this->head; } else { $this->tail->next = $pc; $this->tail =& $this->tail->next; } } /** * @return string */ function extractOption() { if(($this->i < $this->patternLength) and ($this->pattern{$this->i} == '{')) { $end = strpos($this->pattern, '}' , $this->i); if ($end !== false) { $r = substr($this->pattern, ($this->i + 1), ($end - $this->i - 1)); $this->i= $end + 1; return $r; } } return null; } /** * The option is expected to be in decimal and positive. In case of * error, zero is returned. */ function extractPrecisionOption() { $opt = $this->extractOption(); $r = 0; if ($opt !== null) { if (is_numeric($opt)) { $r = (int)$opt; if($r <= 0) { LoggerLog::warn("Precision option ({$opt}) isn't a positive integer."); $r = 0; } } else { LoggerLog::warn("Category option \"{$opt}\" not a decimal integer."); } } return $r; } function parse() { LoggerLog::debug("LoggerPatternParser::parse()"); $c = ''; $this->i = 0; $this->currentLiteral = ''; while ($this->i < $this->patternLength) { $c = $this->pattern{$this->i++};// LoggerLog::debug("LoggerPatternParser::parse() char is now '$c' and currentLiteral is '{$this->currentLiteral}'"); switch($this->state) { case LOG4PHP_LOGGER_PATTERN_PARSER_LITERAL_STATE: // LoggerLog::debug("LoggerPatternParser::parse() state is 'LOG4PHP_LOGGER_PATTERN_PARSER_LITERAL_STATE'"); // In literal state, the last char is always a literal. if($this->i == $this->patternLength) { $this->currentLiteral .= $c; continue; } if($c == LOG4PHP_LOGGER_PATTERN_PARSER_ESCAPE_CHAR) { // LoggerLog::debug("LoggerPatternParser::parse() char is an escape char"); // peek at the next char. switch($this->pattern{$this->i}) { case LOG4PHP_LOGGER_PATTERN_PARSER_ESCAPE_CHAR:
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?