Source of file Syslog.php
Size: 6,079 Bytes - Last Modified: 2014-03-12T23:21:18+01:00
/home/theseer/Downloads/ZendFramework-2.3.0/library/Zend/Log/Writer/Syslog.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252 | <?php /** * Zend Framework (http://framework.zend.com/) * * @link http://github.com/zendframework/zf2 for the canonical source repository * @copyright Copyright (c) 2005-2014 Zend Technologies USA Inc. (http://www.zend.com) * @license http://framework.zend.com/license/new-bsd New BSD License */ namespace Zend\Log\Writer; use Traversable; use Zend\Log\Exception; use Zend\Log\Formatter\Simple as SimpleFormatter; use Zend\Log\Logger; /** * Writes log messages to syslog */ class Syslog extends AbstractWriter { /** * Maps Zend\Log priorities to PHP's syslog priorities * * @var array */ protected $priorities = array( Logger::EMERG => LOG_EMERG, Logger::ALERT => LOG_ALERT, Logger::CRIT => LOG_CRIT, Logger::ERR => LOG_ERR, Logger::WARN => LOG_WARNING, Logger::NOTICE => LOG_NOTICE, Logger::INFO => LOG_INFO, Logger::DEBUG => LOG_DEBUG, ); /** * The default log priority - for unmapped custom priorities * * @var string */ protected $defaultPriority = LOG_NOTICE; /** * Last application name set by a syslog-writer instance * * @var string */ protected static $lastApplication; /** * Last facility name set by a syslog-writer instance * * @var string */ protected static $lastFacility; /** * Application name used by this syslog-writer instance * * @var string */ protected $appName = 'Zend\Log'; /** * Facility used by this syslog-writer instance * * @var int */ protected $facility = LOG_USER; /** * Types of program available to logging of message * * @var array */ protected $validFacilities = array(); /** * Constructor * * @param array $params Array of options; may include "application" and "facility" keys * @return Syslog */ public function __construct($params = null) { if ($params instanceof Traversable) { $params = iterator_to_array($params); } $runInitializeSyslog = true; if (is_array($params)) { parent::__construct($params); if (isset($params['application'])) { $this->appName = $params['application']; } if (isset($params['facility'])) { $this->setFacility($params['facility']); $runInitializeSyslog = false; } } if ($runInitializeSyslog) { $this->initializeSyslog(); } if ($this->formatter === null) { $this->setFormatter(new SimpleFormatter('%message%')); } } /** * Initialize values facilities * * @return void */ protected function initializeValidFacilities() { $constants = array( 'LOG_AUTH', 'LOG_AUTHPRIV', 'LOG_CRON', 'LOG_DAEMON', 'LOG_KERN', 'LOG_LOCAL0', 'LOG_LOCAL1', 'LOG_LOCAL2', 'LOG_LOCAL3', 'LOG_LOCAL4', 'LOG_LOCAL5', 'LOG_LOCAL6', 'LOG_LOCAL7', 'LOG_LPR', 'LOG_MAIL', 'LOG_NEWS', 'LOG_SYSLOG', 'LOG_USER', 'LOG_UUCP' ); foreach ($constants as $constant) { if (defined($constant)) { $this->validFacilities[] = constant($constant); } } } /** * Initialize syslog / set application name and facility * * @return void */ protected function initializeSyslog() { static::$lastApplication = $this->appName; static::$lastFacility = $this->facility; openlog($this->appName, LOG_PID, $this->facility); } /** * Set syslog facility * * @param int $facility Syslog facility * @return Syslog * @throws Exception\InvalidArgumentException for invalid log facility */ public function setFacility($facility) { if ($this->facility === $facility) { return $this; } if (!count($this->validFacilities)) { $this->initializeValidFacilities(); } if (!in_array($facility, $this->validFacilities)) { throw new Exception\InvalidArgumentException( 'Invalid log facility provided; please see http://php.net/openlog for a list of valid facility values' ); } if ('WIN' == strtoupper(substr(PHP_OS, 0, 3)) && ($facility !== LOG_USER) ) { throw new Exception\InvalidArgumentException( 'Only LOG_USER is a valid log facility on Windows' ); } $this->facility = $facility; $this->initializeSyslog(); return $this; } /** * Set application name * * @param string $appName Application name * @return Syslog */ public function setApplicationName($appName) { if ($this->appName === $appName) { return $this; } $this->appName = $appName; $this->initializeSyslog(); return $this; } /** * Close syslog. * * @return void */ public function shutdown() { closelog(); } /** * Write a message to syslog. * * @param array $event event data * @return void */ protected function doWrite(array $event) { if (array_key_exists($event['priority'], $this->priorities)) { $priority = $this->priorities[$event['priority']]; } else { $priority = $this->defaultPriority; } if ($this->appName !== static::$lastApplication || $this->facility !== static::$lastFacility ) { $this->initializeSyslog(); } $message = $this->formatter->format($event); syslog($priority, $message); } } |