PluginProbe
GetResponse Forms by Optin Cat / 1.5.4
GetResponse Forms by Optin Cat v1.5.4
1.3.4 1.3.5 1.3.6 1.3.8 1.3.9 1.4.0 1.4.1 1.4.2 1.5.0 1.5.1 1.5.2 1.5.4 1.5.5 1.5.6 1.5.7 1.5.8 1.6.1 1.6.2 1.6.3 1.7.0 1.7.1 1.7.2 1.8.0 1.8.1 2.0.0 All 36 releases
getresponse / includes / classes / Mustache / Logger / StreamLogger.php

StreamLogger.php in GetResponse Forms by Optin Cat 1.5.4, at includes/classes/Mustache/Logger/StreamLogger.php

195 lines 5.5 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 /*
4 * This file is part of Mustache.php.
5 *
6 * (c) 2010-2014 Justin Hileman
7 *
8 * For the full copyright and license information, please view the LICENSE
9 * file that was distributed with this source code.
10 */
11
12 /**
13 * A Mustache Stream Logger.
14 *
15 * The Stream Logger wraps a file resource instance (such as a stream) or a
16 * stream URL. All log messages over the threshold level will be appended to
17 * this stream.
18 *
19 * Hint: Try `php://stderr` for your stream URL.
20 */
21 class Mustache_Logger_StreamLogger extends Mustache_Logger_AbstractLogger
22 {
23 protected static $levels = array(
24 self::DEBUG => 100,
25 self::INFO => 200,
26 self::NOTICE => 250,
27 self::WARNING => 300,
28 self::ERROR => 400,
29 self::CRITICAL => 500,
30 self::ALERT => 550,
31 self::EMERGENCY => 600,
32 );
33
34 protected $level;
35 protected $stream = null;
36 protected $url = null;
37
38 /**
39 * @throws InvalidArgumentException if the logging level is unknown.
40 *
41 * @param resource|string $stream Resource instance or URL
42 * @param integer $level The minimum logging level at which this handler will be triggered
43 */
44 public function __construct($stream, $level = Mustache_Logger::ERROR)
45 {
46 $this->setLevel($level);
47
48 if (is_resource($stream)) {
49 $this->stream = $stream;
50 } else {
51 $this->url = $stream;
52 }
53 }
54
55 /**
56 * Close stream resources.
57 */
58 public function __destruct()
59 {
60 if (is_resource($this->stream)) {
61 fclose($this->stream);
62 }
63 }
64
65 /**
66 * Set the minimum logging level.
67 *
68 * @throws Mustache_Exception_InvalidArgumentException if the logging level is unknown.
69 *
70 * @param integer $level The minimum logging level which will be written
71 */
72 public function setLevel($level)
73 {
74 if (!array_key_exists($level, self::$levels)) {
75 throw new Mustache_Exception_InvalidArgumentException(sprintf('Unexpected logging level: %s', $level));
76 }
77
78 $this->level = $level;
79 }
80
81 /**
82 * Get the current minimum logging level.
83 *
84 * @return integer
85 */
86 public function getLevel()
87 {
88 return $this->level;
89 }
90
91 /**
92 * Logs with an arbitrary level.
93 *
94 * @throws Mustache_Exception_InvalidArgumentException if the logging level is unknown.
95 *
96 * @param mixed $level
97 * @param string $message
98 * @param array $context
99 */
100 public function log($level, $message, array $context = array())
101 {
102 if (!array_key_exists($level, self::$levels)) {
103 throw new Mustache_Exception_InvalidArgumentException(sprintf('Unexpected logging level: %s', $level));
104 }
105
106 if (self::$levels[$level] >= self::$levels[$this->level]) {
107 $this->writeLog($level, $message, $context);
108 }
109 }
110
111 /**
112 * Write a record to the log.
113 *
114 * @throws Mustache_Exception_LogicException If neither a stream resource nor url is present.
115 * @throws Mustache_Exception_RuntimeException If the stream url cannot be opened.
116 *
117 * @param integer $level The logging level
118 * @param string $message The log message
119 * @param array $context The log context
120 */
121 protected function writeLog($level, $message, array $context = array())
122 {
123 if (!is_resource($this->stream)) {
124 if (!isset($this->url)) {
125 throw new Mustache_Exception_LogicException('Missing stream url, the stream can not be opened. This may be caused by a premature call to close().');
126 }
127
128 $this->stream = fopen($this->url, 'a');
129 if (!is_resource($this->stream)) {
130 // @codeCoverageIgnoreStart
131 throw new Mustache_Exception_RuntimeException(sprintf('The stream or file "%s" could not be opened.', $this->url));
132 // @codeCoverageIgnoreEnd
133 }
134 }
135
136 fwrite($this->stream, self::formatLine($level, $message, $context));
137 }
138
139 /**
140 * Gets the name of the logging level.
141 *
142 * @throws InvalidArgumentException if the logging level is unknown.
143 *
144 * @param integer $level
145 *
146 * @return string
147 */
148 protected static function getLevelName($level)
149 {
150 return strtoupper($level);
151 }
152
153 /**
154 * Format a log line for output.
155 *
156 * @param integer $level The logging level
157 * @param string $message The log message
158 * @param array $context The log context
159 *
160 * @return string
161 */
162 protected static function formatLine($level, $message, array $context = array())
163 {
164 return sprintf(
165 "%s: %s\n",
166 self::getLevelName($level),
167 self::interpolateMessage($message, $context)
168 );
169 }
170
171 /**
172 * Interpolate context values into the message placeholders.
173 *
174 * @param string $message
175 * @param array $context
176 *
177 * @return string
178 */
179 protected static function interpolateMessage($message, array $context = array())
180 {
181 if (strpos($message, '{') === false) {
182 return $message;
183 }
184
185 // build a replacement array with braces around the context keys
186 $replace = array();
187 foreach ($context as $key => $val) {
188 $replace['{' . $key . '}'] = $val;
189 }
190
191 // interpolate replacement values into the the message and return
192 return strtr($message, $replace);
193 }
194 }
195