mirror of
https://github.com/ZeJMaN/LBCAlerte_ynh.git
synced 2025-06-08 13:35:30 +02:00
304 lines
7.4 KiB
PHP
304 lines
7.4 KiB
PHP
<?php
|
|
/**
|
|
* Licensed to the Apache Software Foundation (ASF) under one or more
|
|
* contributor license agreements. See the NOTICE file distributed with
|
|
* this work for additional information regarding copyright ownership.
|
|
* The ASF licenses this file to You under the Apache License, Version 2.0
|
|
* (the "License"); you may not use this file except in compliance with
|
|
* the License. You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
/**
|
|
* Log events to a system log using the PHP syslog() function.
|
|
*
|
|
* This appenders requires a layout.
|
|
*
|
|
* ## Configurable parameters: ##
|
|
*
|
|
* - **ident** - The ident of the syslog message.
|
|
* - **priority** - The priority for the syslog message (used when overriding
|
|
* priority).
|
|
* - **facility** - The facility for the syslog message
|
|
* - **overridePriority** - If set to true, the message priority will always
|
|
* use the value defined in {@link $priority}, otherwise the priority will
|
|
* be determined by the message's log level.
|
|
* - **option** - The option value for the syslog message.
|
|
*
|
|
* Recognised syslog options are:
|
|
*
|
|
* - CONS - if there is an error while sending data to the system logger, write directly to the system console
|
|
* - NDELAY - open the connection to the logger immediately
|
|
* - ODELAY - delay opening the connection until the first message is logged (default)
|
|
* - PERROR - print log message also to standard error
|
|
* - PID - include PID with each message
|
|
*
|
|
* Multiple options can be set by delimiting them with a pipe character,
|
|
* e.g.: "CONS|PID|PERROR".
|
|
*
|
|
* Recognised syslog priorities are:
|
|
*
|
|
* - EMERG
|
|
* - ALERT
|
|
* - CRIT
|
|
* - ERR
|
|
* - WARNING
|
|
* - NOTICE
|
|
* - INFO
|
|
* - DEBUG
|
|
*
|
|
* Levels are mapped as follows:
|
|
*
|
|
* - <b>FATAL</b> to LOG_ALERT
|
|
* - <b>ERROR</b> to LOG_ERR
|
|
* - <b>WARN</b> to LOG_WARNING
|
|
* - <b>INFO</b> to LOG_INFO
|
|
* - <b>DEBUG</b> to LOG_DEBUG
|
|
* - <b>TRACE</b> to LOG_DEBUG
|
|
*
|
|
* @version $Revision: 1337820 $
|
|
* @package log4php
|
|
* @subpackage appenders
|
|
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0
|
|
* @link http://logging.apache.org/log4php/docs/appenders/syslog.html Appender documentation
|
|
*/
|
|
class LoggerAppenderSyslog extends LoggerAppender {
|
|
|
|
/**
|
|
* The ident string is added to each message. Typically the name of your application.
|
|
*
|
|
* @var string
|
|
*/
|
|
protected $ident = "Apache log4php";
|
|
|
|
/**
|
|
* The syslog priority to use when overriding priority. This setting is
|
|
* required if {@link overridePriority} is set to true.
|
|
*
|
|
* @var string
|
|
*/
|
|
protected $priority;
|
|
|
|
/**
|
|
* The option used when opening the syslog connection.
|
|
*
|
|
* @var string
|
|
*/
|
|
protected $option = 'PID|CONS';
|
|
|
|
/**
|
|
* The facility value indicates the source of the message.
|
|
*
|
|
* @var string
|
|
*/
|
|
protected $facility = 'USER';
|
|
|
|
/**
|
|
* If set to true, the message priority will always use the value defined
|
|
* in {@link $priority}, otherwise the priority will be determined by the
|
|
* message's log level.
|
|
*
|
|
* @var string
|
|
*/
|
|
protected $overridePriority = false;
|
|
|
|
/**
|
|
* Holds the int value of the {@link $priority}.
|
|
* @var int
|
|
*/
|
|
private $intPriority;
|
|
|
|
/**
|
|
* Holds the int value of the {@link $facility}.
|
|
* @var int
|
|
*/
|
|
private $intFacility;
|
|
|
|
/**
|
|
* Holds the int value of the {@link $option}.
|
|
* @var int
|
|
*/
|
|
private $intOption;
|
|
|
|
/**
|
|
* Sets the {@link $ident}.
|
|
*
|
|
* @param string $ident
|
|
*/
|
|
public function setIdent($ident) {
|
|
$this->ident = $ident;
|
|
}
|
|
|
|
/**
|
|
* Sets the {@link $priority}.
|
|
*
|
|
* @param string $priority
|
|
*/
|
|
public function setPriority($priority) {
|
|
$this->priority = $priority;
|
|
}
|
|
|
|
/**
|
|
* Sets the {@link $facility}.
|
|
*
|
|
* @param string $facility
|
|
*/
|
|
public function setFacility($facility) {
|
|
$this->facility = $facility;
|
|
}
|
|
|
|
/**
|
|
* Sets the {@link $overridePriority}.
|
|
*
|
|
* @param string $overridePriority
|
|
*/
|
|
public function setOverridePriority($overridePriority) {
|
|
$this->overridePriority = $overridePriority;
|
|
}
|
|
|
|
/**
|
|
* Sets the 'option' parameter.
|
|
*
|
|
* @param string $option
|
|
*/
|
|
public function setOption($option) {
|
|
$this->option = $option;
|
|
}
|
|
|
|
/**
|
|
* Returns the 'ident' parameter.
|
|
*
|
|
* @return string $ident
|
|
*/
|
|
public function getIdent() {
|
|
return $this->ident;
|
|
}
|
|
|
|
/**
|
|
* Returns the 'priority' parameter.
|
|
*
|
|
* @return string
|
|
*/
|
|
public function getPriority() {
|
|
return $this->priority;
|
|
}
|
|
|
|
/**
|
|
* Returns the 'facility' parameter.
|
|
*
|
|
* @return string
|
|
*/
|
|
public function getFacility() {
|
|
return $this->facility;
|
|
}
|
|
|
|
/**
|
|
* Returns the 'overridePriority' parameter.
|
|
*
|
|
* @return string
|
|
*/
|
|
public function getOverridePriority() {
|
|
return $this->overridePriority;
|
|
}
|
|
|
|
/**
|
|
* Returns the 'option' parameter.
|
|
*
|
|
* @return string
|
|
*/
|
|
public function getOption() {
|
|
return $this->option;
|
|
}
|
|
|
|
|
|
public function activateOptions() {
|
|
$this->intPriority = $this->parsePriority();
|
|
$this->intOption = $this->parseOption();
|
|
$this->intFacility = $this->parseFacility();
|
|
|
|
$this->closed = false;
|
|
}
|
|
|
|
public function close() {
|
|
if($this->closed != true) {
|
|
closelog();
|
|
$this->closed = true;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Appends the event to syslog.
|
|
*
|
|
* Log is opened and closed each time because if it is not closed, it
|
|
* can cause the Apache httpd server to log to whatever ident/facility
|
|
* was used in openlog().
|
|
*
|
|
* @see http://www.php.net/manual/en/function.syslog.php#97843
|
|
*/
|
|
public function append(LoggerLoggingEvent $event) {
|
|
$priority = $this->getSyslogPriority($event->getLevel());
|
|
$message = $this->layout->format($event);
|
|
|
|
openlog($this->ident, $this->intOption, $this->intFacility);
|
|
syslog($priority, $message);
|
|
closelog();
|
|
}
|
|
|
|
/** Determines which syslog priority to use based on the given level. */
|
|
private function getSyslogPriority(LoggerLevel $level) {
|
|
if($this->overridePriority) {
|
|
return $this->intPriority;
|
|
}
|
|
return $level->getSyslogEquivalent();
|
|
}
|
|
|
|
/** Parses a syslog option string and returns the correspodning int value. */
|
|
private function parseOption() {
|
|
$value = 0;
|
|
$options = explode('|', $this->option);
|
|
|
|
foreach($options as $option) {
|
|
if (!empty($option)) {
|
|
$constant = "LOG_" . trim($option);
|
|
if (defined($constant)) {
|
|
$value |= constant($constant);
|
|
} else {
|
|
trigger_error("log4php: Invalid syslog option provided: $option. Whole option string: {$this->option}.", E_USER_WARNING);
|
|
}
|
|
}
|
|
}
|
|
return $value;
|
|
}
|
|
|
|
/** Parses the facility string and returns the corresponding int value. */
|
|
private function parseFacility() {
|
|
if (!empty($this->facility)) {
|
|
$constant = "LOG_" . trim($this->facility);
|
|
if (defined($constant)) {
|
|
return constant($constant);
|
|
} else {
|
|
trigger_error("log4php: Invalid syslog facility provided: {$this->facility}.", E_USER_WARNING);
|
|
}
|
|
}
|
|
}
|
|
|
|
/** Parses the priority string and returns the corresponding int value. */
|
|
private function parsePriority() {
|
|
if (!empty($this->priority)) {
|
|
$constant = "LOG_" . trim($this->priority);
|
|
if (defined($constant)) {
|
|
return constant($constant);
|
|
} else {
|
|
trigger_error("log4php: Invalid syslog priority provided: {$this->priority}.", E_USER_WARNING);
|
|
}
|
|
}
|
|
}
|
|
}
|