| Code Coverage
| Classes and Traits | Functions and Methods | Lines
Total |  | 0.00% | 0 / 1 |  | 88.24% | 15 / 17 | CRAP |  | 95.00% | 57 / 60
LoggerAppenderSyslog |  | 0.00% | 0 / 1 |  | 88.24% | 15 / 17 | 26 |  | 95.00% | 57 / 60
setIdent($ident) |  | 100.00% | 1 / 1 | 1 |  | 100.00% | 2 / 2
setPriority($priority) |  | 100.00% | 1 / 1 | 1 |  | 100.00% | 2 / 2
setFacility($facility) |  | 100.00% | 1 / 1 | 1 |  | 100.00% | 2 / 2
setOverridePriority($overridePriority) |  | 100.00% | 1 / 1 | 1 |  | 100.00% | 2 / 2
setOption($option) |  | 100.00% | 1 / 1 | 1 |  | 100.00% | 2 / 2
getIdent() |  | 100.00% | 1 / 1 | 1 |  | 100.00% | 1 / 1
getPriority() |  | 100.00% | 1 / 1 | 1 |  | 100.00% | 1 / 1
getFacility() |  | 100.00% | 1 / 1 | 1 |  | 100.00% | 1 / 1
getOverridePriority() |  | 100.00% | 1 / 1 | 1 |  | 100.00% | 1 / 1
getOption() |  | 100.00% | 1 / 1 | 1 |  | 100.00% | 1 / 1
activateOptions() |  | 100.00% | 1 / 1 | 1 |  | 100.00% | 5 / 5
close() |  | 100.00% | 1 / 1 | 2 |  | 100.00% | 5 / 5
append(LoggerLoggingEvent $event) |  | 100.00% | 1 / 1 | 1 |  | 100.00% | 6 / 6
getSyslogPriority(LoggerLevel $level) |  | 100.00% | 1 / 1 | 2 |  | 100.00% | 3 / 3
parseOption() |  | 100.00% | 1 / 1 | 4 |  | 100.00% | 12 / 12
parseFacility() |  | 0.00% | 0 / 1 | 3.21 |  | 71.43% | 5 / 7
parsePriority() |  | 0.00% | 0 / 1 | 3.03 |  | 85.71% | 6 / 7

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 |
19 | /**
20 | * Log events to a system log using the PHP syslog() function.
21 | *
22 | * This appenders requires a layout.
23 | *
24 | * ## Configurable parameters: ##
25 | *
26 | * - **ident** - The ident of the syslog message.
27 | * - **priority** - The priority for the syslog message (used when overriding
28 | * priority).
29 | * - **facility** - The facility for the syslog message
30 | * - **overridePriority** - If set to true, the message priority will always
31 | * use the value defined in {@link $priority}, otherwise the priority will
32 | * be determined by the message's log level.
33 | * - **option** - The option value for the syslog message.
34 | *
35 | * Recognised syslog options are:
36 | *
37 | * - CONS - if there is an error while sending data to the system logger, write directly to the system console
38 | * - NDELAY - open the connection to the logger immediately
39 | * - ODELAY - delay opening the connection until the first message is logged (default)
40 | * - PERROR - print log message also to standard error
41 | * - PID - include PID with each message
42 | *
43 | * Multiple options can be set by delimiting them with a pipe character,
44 | * e.g.: "CONS|PID|PERROR".
45 | *
46 | * Recognised syslog priorities are:
47 | *
48 | * - EMERG
49 | * - ALERT
50 | * - CRIT
51 | * - ERR
52 | * - WARNING
53 | * - NOTICE
54 | * - INFO
55 | * - DEBUG
56 | *
57 | * Levels are mapped as follows:
58 | *
59 | * - <b>FATAL</b> to LOG_ALERT
60 | * - <b>ERROR</b> to LOG_ERR
61 | * - <b>WARN</b> to LOG_WARNING
62 | * - <b>INFO</b> to LOG_INFO
63 | * - <b>DEBUG</b> to LOG_DEBUG
64 | * - <b>TRACE</b> to LOG_DEBUG
65 | *
66 | * @version $Revision: 1337820 $
67 | * @package log4php
68 | * @subpackage appenders
69 | * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0
70 | * @link http://logging.apache.org/log4php/docs/appenders/syslog.html Appender documentation
71 | */
72 | class LoggerAppenderSyslog extends LoggerAppender {
73 |
74 | /**
75 | * The ident string is added to each message. Typically the name of your application.
76 | *
77 | * @var string
78 | */
79 | protected $ident = "Apache log4php";
80 |
81 | /**
82 | * The syslog priority to use when overriding priority. This setting is
83 | * required if {@link overridePriority} is set to true.
84 | *
85 | * @var string
86 | */
87 | protected $priority;
88 |
89 | /**
90 | * The option used when opening the syslog connection.
91 | *
92 | * @var string
93 | */
94 | protected $option = 'PID|CONS';
95 |
96 | /**
97 | * The facility value indicates the source of the message.
98 | *
99 | * @var string
100 | */
101 | protected $facility = 'USER';
102 |
103 | /**
104 | * If set to true, the message priority will always use the value defined
105 | * in {@link $priority}, otherwise the priority will be determined by the
106 | * message's log level.
107 | *
108 | * @var string
109 | */
110 | protected $overridePriority = false;
111 |
112 | /**
113 | * Holds the int value of the {@link $priority}.
114 | * @var int
115 | */
116 | private $intPriority;
117 |
118 | /**
119 | * Holds the int value of the {@link $facility}.
120 | * @var int
121 | */
122 | private $intFacility;
123 |
124 | /**
125 | * Holds the int value of the {@link $option}.
126 | * @var int
127 | */
128 | private $intOption;
129 |
130 | /**
131 | * Sets the {@link $ident}.
132 | *
133 | * @param string $ident
134 | */
135 | public function setIdent($ident) {
136 | $this->ident = $ident;
137 | }
138 |
139 | /**
140 | * Sets the {@link $priority}.
141 | *
142 | * @param string $priority
143 | */
144 | public function setPriority($priority) {
145 | $this->priority = $priority;
146 | }
147 |
148 | /**
149 | * Sets the {@link $facility}.
150 | *
151 | * @param string $facility
152 | */
153 | public function setFacility($facility) {
154 | $this->facility = $facility;
155 | }
156 |
157 | /**
158 | * Sets the {@link $overridePriority}.
159 | *
160 | * @param string $overridePriority
161 | */
162 | public function setOverridePriority($overridePriority) {
163 | $this->overridePriority = $overridePriority;
164 | }
165 |
166 | /**
167 | * Sets the 'option' parameter.
168 | *
169 | * @param string $option
170 | */
171 | public function setOption($option) {
172 | $this->option = $option;
173 | }
174 |
175 | /**
176 | * Returns the 'ident' parameter.
177 | *
178 | * @return string $ident
179 | */
180 | public function getIdent() {
181 | return $this->ident;
182 | }
183 |
184 | /**
185 | * Returns the 'priority' parameter.
186 | *
187 | * @return string
188 | */
189 | public function getPriority() {
190 | return $this->priority;
191 | }
192 |
193 | /**
194 | * Returns the 'facility' parameter.
195 | *
196 | * @return string
197 | */
198 | public function getFacility() {
199 | return $this->facility;
200 | }
201 |
202 | /**
203 | * Returns the 'overridePriority' parameter.
204 | *
205 | * @return string
206 | */
207 | public function getOverridePriority() {
208 | return $this->overridePriority;
209 | }
210 |
211 | /**
212 | * Returns the 'option' parameter.
213 | *
214 | * @return string
215 | */
216 | public function getOption() {
217 | return $this->option;
218 | }
219 |
220 |
221 | public function activateOptions() {
222 | $this->intPriority = $this->parsePriority();
223 | $this->intOption = $this->parseOption();
224 | $this->intFacility = $this->parseFacility();
225 |
226 | $this->closed = false;
227 | }
228 |
229 | public function close() {
230 | if($this->closed != true) {
231 | closelog();
232 | $this->closed = true;
233 | }
234 | }
235 |
236 | /**
237 | * Appends the event to syslog.
238 | *
239 | * Log is opened and closed each time because if it is not closed, it
240 | * can cause the Apache httpd server to log to whatever ident/facility
241 | * was used in openlog().
242 | *
243 | * @see http://www.php.net/manual/en/function.syslog.php#97843
244 | */
245 | public function append(LoggerLoggingEvent $event) {
246 | $priority = $this->getSyslogPriority($event->getLevel());
247 | $message = $this->layout->format($event);
248 |
249 | openlog($this->ident, $this->intOption, $this->intFacility);
250 | syslog($priority, $message);
251 | closelog();
252 | }
253 |
254 | /** Determines which syslog priority to use based on the given level. */
255 | private function getSyslogPriority(LoggerLevel $level) {
256 | if($this->overridePriority) {
257 | return $this->intPriority;
258 | }
259 | return $level->getSyslogEquivalent();
260 | }
261 |
262 | /** Parses a syslog option string and returns the correspodning int value. */
263 | private function parseOption() {
264 | $value = 0;
265 | $options = explode('|', $this->option);
266 |
267 | foreach($options as $option) {
268 | if (!empty($option)) {
269 | $constant = "LOG_" . trim($option);
270 | if (defined($constant)) {
271 | $value |= constant($constant);
272 | } else {
273 | trigger_error("log4php: Invalid syslog option provided: $option. Whole option string: {$this->option}.", E_USER_WARNING);
274 | }
275 | }
276 | }
277 | return $value;
278 | }
279 |
280 | /** Parses the facility string and returns the corresponding int value. */
281 | private function parseFacility() {
282 | if (!empty($this->facility)) {
283 | $constant = "LOG_" . trim($this->facility);
284 | if (defined($constant)) {
285 | return constant($constant);
286 | } else {
287 | trigger_error("log4php: Invalid syslog facility provided: {$this->facility}.", E_USER_WARNING);
288 | }
289 | }
290 | }
291 |
292 | /** Parses the priority string and returns the corresponding int value. */
293 | private function parsePriority() {
294 | if (!empty($this->priority)) {
295 | $constant = "LOG_" . trim($this->priority);
296 | if (defined($constant)) {
297 | return constant($constant);
298 | } else {
299 | trigger_error("log4php: Invalid syslog priority provided: {$this->priority}.", E_USER_WARNING);
300 | }
301 | }
302 | }
303 | }