Overview

Packages

  • log4php
    • appenders
    • configurators
    • filters
    • helpers
    • layouts
    • pattern
    • renderers

Classes

  • LoggerAppenderConsole
  • LoggerAppenderDailyFile
  • LoggerAppenderEcho
  • LoggerAppenderFile
  • LoggerAppenderFirePHP
  • LoggerAppenderMail
  • LoggerAppenderMailEvent
  • LoggerAppenderMongoDB
  • LoggerAppenderNull
  • LoggerAppenderPDO
  • LoggerAppenderPhp
  • LoggerAppenderRollingFile
  • LoggerAppenderSocket
  • LoggerAppenderSyslog
  • Overview
  • Package
  • Class
  • Tree
  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: }
304: 
Apache log4php API documentation generated by ApiGen 2.8.0