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: * LoggerPatternConverter is an abstract class that provides the formatting
23: * functionality that derived classes need.
24: *
25: * <p>Conversion specifiers in a conversion patterns are parsed to
26: * individual PatternConverters. Each of which is responsible for
27: * converting a logging event in a converter specific manner.</p>
28: *
29: * @version $Revision: 1326626 $
30: * @package log4php
31: * @subpackage helpers
32: * @since 0.3
33: */
34: abstract class LoggerPatternConverter {
35:
36: /**
37: * Next converter in the converter chain.
38: * @var LoggerPatternConverter
39: */
40: public $next = null;
41:
42: /**
43: * Formatting information, parsed from pattern modifiers.
44: * @var LoggerFormattingInfo
45: */
46: protected $formattingInfo;
47:
48: /**
49: * Converter-specific formatting options.
50: * @var array
51: */
52: protected $option;
53:
54: /**
55: * Constructor
56: * @param LoggerFormattingInfo $formattingInfo
57: * @param array $option
58: */
59: public function __construct(LoggerFormattingInfo $formattingInfo = null, $option = null) {
60: $this->formattingInfo = $formattingInfo;
61: $this->option = $option;
62: $this->activateOptions();
63: }
64:
65: /**
66: * Called in constructor. Converters which need to process the options
67: * can override this method.
68: */
69: public function activateOptions() { }
70:
71: /**
72: * Converts the logging event to the desired format. Derived pattern
73: * converters must implement this method.
74: *
75: * @param LoggerLoggingEvent $event
76: */
77: abstract public function convert(LoggerLoggingEvent $event);
78:
79: /**
80: * Converts the event and formats it according to setting in the
81: * Formatting information object.
82: *
83: * @param string &$sbuf string buffer to write to
84: * @param LoggerLoggingEvent $event Event to be formatted.
85: */
86: public function format(&$sbuf, $event) {
87: $string = $this->convert($event);
88:
89: if (!isset($this->formattingInfo)) {
90: $sbuf .= $string;
91: return;
92: }
93:
94: $fi = $this->formattingInfo;
95:
96: // Empty string
97: if($string === '' || is_null($string)) {
98: if($fi->min > 0) {
99: $sbuf .= str_repeat(' ', $fi->min);
100: }
101: return;
102: }
103:
104: $len = strlen($string);
105:
106: // Trim the string if needed
107: if($len > $fi->max) {
108: if ($fi->trimLeft) {
109: $sbuf .= substr($string, $len - $fi->max, $fi->max);
110: } else {
111: $sbuf .= substr($string , 0, $fi->max);
112: }
113: }
114:
115: // Add padding if needed
116: else if($len < $fi->min) {
117: if($fi->padLeft) {
118: $sbuf .= str_repeat(' ', $fi->min - $len);
119: $sbuf .= $string;
120: } else {
121: $sbuf .= $string;
122: $sbuf .= str_repeat(' ', $fi->min - $len);
123: }
124: }
125:
126: // No action needed
127: else {
128: $sbuf .= $string;
129: }
130: }
131: }
132: