|
1 <?php |
|
2 /** |
|
3 * Licensed to the Apache Software Foundation (ASF) under one or more |
|
4 * contributor license agreements. See the NOTICE file distributed with |
|
5 * this work for additional information regarding copyright ownership. |
|
6 * The ASF licenses this file to You under the Apache License, Version 2.0 |
|
7 * (the "License"); you may not use this file except in compliance with |
|
8 * the License. You may obtain a copy of the License at |
|
9 * |
|
10 * http://www.apache.org/licenses/LICENSE-2.0 |
|
11 * |
|
12 * Unless required by applicable law or agreed to in writing, software |
|
13 * distributed under the License is distributed on an "AS IS" BASIS, |
|
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|
15 * See the License for the specific language governing permissions and |
|
16 * limitations under the License. |
|
17 * |
|
18 * @package log4php |
|
19 */ |
|
20 |
|
21 /** |
|
22 * A flexible layout configurable with a pattern string. |
|
23 * |
|
24 * Configurable parameters: |
|
25 * |
|
26 * * converionPattern - A string which controls the formatting of logging |
|
27 * events. See docs for full specification. |
|
28 * |
|
29 * @package log4php |
|
30 * @subpackage layouts |
|
31 * @version $Revision: 1395470 $ |
|
32 */ |
|
33 class LoggerLayoutPattern extends LoggerLayout { |
|
34 |
|
35 /** Default conversion pattern */ |
|
36 const DEFAULT_CONVERSION_PATTERN = '%date %-5level %logger %message%newline'; |
|
37 |
|
38 /** Default conversion TTCC Pattern */ |
|
39 const TTCC_CONVERSION_PATTERN = '%d [%t] %p %c %x - %m%n'; |
|
40 |
|
41 /** The conversion pattern. */ |
|
42 protected $pattern = self::DEFAULT_CONVERSION_PATTERN; |
|
43 |
|
44 /** Maps conversion keywords to the relevant converter (default implementation). */ |
|
45 protected static $defaultConverterMap = array( |
|
46 'c' => 'LoggerPatternConverterLogger', |
|
47 'lo' => 'LoggerPatternConverterLogger', |
|
48 'logger' => 'LoggerPatternConverterLogger', |
|
49 |
|
50 'C' => 'LoggerPatternConverterClass', |
|
51 'class' => 'LoggerPatternConverterClass', |
|
52 |
|
53 'cookie' => 'LoggerPatternConverterCookie', |
|
54 |
|
55 'd' => 'LoggerPatternConverterDate', |
|
56 'date' => 'LoggerPatternConverterDate', |
|
57 |
|
58 'e' => 'LoggerPatternConverterEnvironment', |
|
59 'env' => 'LoggerPatternConverterEnvironment', |
|
60 |
|
61 'ex' => 'LoggerPatternConverterThrowable', |
|
62 'exception' => 'LoggerPatternConverterThrowable', |
|
63 'throwable' => 'LoggerPatternConverterThrowable', |
|
64 |
|
65 'F' => 'LoggerPatternConverterFile', |
|
66 'file' => 'LoggerPatternConverterFile', |
|
67 |
|
68 'l' => 'LoggerPatternConverterLocation', |
|
69 'location' => 'LoggerPatternConverterLocation', |
|
70 |
|
71 'L' => 'LoggerPatternConverterLine', |
|
72 'line' => 'LoggerPatternConverterLine', |
|
73 |
|
74 'm' => 'LoggerPatternConverterMessage', |
|
75 'msg' => 'LoggerPatternConverterMessage', |
|
76 'message' => 'LoggerPatternConverterMessage', |
|
77 |
|
78 'M' => 'LoggerPatternConverterMethod', |
|
79 'method' => 'LoggerPatternConverterMethod', |
|
80 |
|
81 'n' => 'LoggerPatternConverterNewLine', |
|
82 'newline' => 'LoggerPatternConverterNewLine', |
|
83 |
|
84 'p' => 'LoggerPatternConverterLevel', |
|
85 'le' => 'LoggerPatternConverterLevel', |
|
86 'level' => 'LoggerPatternConverterLevel', |
|
87 |
|
88 'r' => 'LoggerPatternConverterRelative', |
|
89 'relative' => 'LoggerPatternConverterRelative', |
|
90 |
|
91 'req' => 'LoggerPatternConverterRequest', |
|
92 'request' => 'LoggerPatternConverterRequest', |
|
93 |
|
94 's' => 'LoggerPatternConverterServer', |
|
95 'server' => 'LoggerPatternConverterServer', |
|
96 |
|
97 'ses' => 'LoggerPatternConverterSession', |
|
98 'session' => 'LoggerPatternConverterSession', |
|
99 |
|
100 'sid' => 'LoggerPatternConverterSessionID', |
|
101 'sessionid' => 'LoggerPatternConverterSessionID', |
|
102 |
|
103 't' => 'LoggerPatternConverterProcess', |
|
104 'pid' => 'LoggerPatternConverterProcess', |
|
105 'process' => 'LoggerPatternConverterProcess', |
|
106 |
|
107 'x' => 'LoggerPatternConverterNDC', |
|
108 'ndc' => 'LoggerPatternConverterNDC', |
|
109 |
|
110 'X' => 'LoggerPatternConverterMDC', |
|
111 'mdc' => 'LoggerPatternConverterMDC', |
|
112 ); |
|
113 |
|
114 /** Maps conversion keywords to the relevant converter. */ |
|
115 protected $converterMap = array(); |
|
116 |
|
117 /** |
|
118 * Head of a chain of Converters. |
|
119 * @var LoggerPatternConverter |
|
120 */ |
|
121 private $head; |
|
122 |
|
123 /** Returns the default converter map. */ |
|
124 public static function getDefaultConverterMap() { |
|
125 return self::$defaultConverterMap; |
|
126 } |
|
127 |
|
128 /** Constructor. Initializes the converter map. */ |
|
129 public function __construct() { |
|
130 $this->converterMap = self::$defaultConverterMap; |
|
131 } |
|
132 |
|
133 /** |
|
134 * Sets the conversionPattern option. This is the string which |
|
135 * controls formatting and consists of a mix of literal content and |
|
136 * conversion specifiers. |
|
137 * @param array $conversionPattern |
|
138 */ |
|
139 public function setConversionPattern($conversionPattern) { |
|
140 $this->pattern = $conversionPattern; |
|
141 } |
|
142 |
|
143 /** |
|
144 * Processes the conversion pattern and creates a corresponding chain of |
|
145 * pattern converters which will be used to format logging events. |
|
146 */ |
|
147 public function activateOptions() { |
|
148 if (!isset($this->pattern)) { |
|
149 throw new LoggerException("Mandatory parameter 'conversionPattern' is not set."); |
|
150 } |
|
151 |
|
152 $parser = new LoggerPatternParser($this->pattern, $this->converterMap); |
|
153 $this->head = $parser->parse(); |
|
154 } |
|
155 |
|
156 /** |
|
157 * Produces a formatted string as specified by the conversion pattern. |
|
158 * |
|
159 * @param LoggerLoggingEvent $event |
|
160 * @return string |
|
161 */ |
|
162 public function format(LoggerLoggingEvent $event) { |
|
163 $sbuf = ''; |
|
164 $converter = $this->head; |
|
165 while ($converter !== null) { |
|
166 $converter->format($sbuf, $event); |
|
167 $converter = $converter->next; |
|
168 } |
|
169 return $sbuf; |
|
170 } |
|
171 } |