From b23b1ce9ae00d2ea77511996b77cf4ebe1f09901 Mon Sep 17 00:00:00 2001 From: Chuck Hagenbuch Date: Sun, 30 Nov 2008 20:34:27 -0500 Subject: [PATCH] add syslog Horde_Log handler (#6989) --- framework/Log/lib/Horde/Log/Handler/Syslog.php | 93 ++++++++++++++++++++++++++ framework/Log/package.xml | 2 + 2 files changed, 95 insertions(+) create mode 100644 framework/Log/lib/Horde/Log/Handler/Syslog.php diff --git a/framework/Log/lib/Horde/Log/Handler/Syslog.php b/framework/Log/lib/Horde/Log/Handler/Syslog.php new file mode 100644 index 000000000..db1fb820b --- /dev/null +++ b/framework/Log/lib/Horde/Log/Handler/Syslog.php @@ -0,0 +1,93 @@ + + * @author Chuck Hagenbuch + * @license http://opensource.org/licenses/bsd-license.php BSD + */ + +/** + * @category Horde + * @package Horde_Log + * @subpackage Handlers + * @author Mike Naberezny + * @author Chuck Hagenbuch + * @license http://opensource.org/licenses/bsd-license.php BSD + */ +class Horde_Log_Handler_Syslog extends Horde_Log_Handler_Base +{ + /** + * Whether openlog has been called + * @var bool + */ + protected $_opened = false; + + /** + * Options to be set by setOption(). Sets openlog and syslog options. + * @var array + */ + protected $_options = array( + 'ident' => false, + 'facility' => LOG_USER, + 'openlogOptions' => false, + 'defaultPriority' => LOG_ERR, + ); + + /** + * Map of log levels to syslog priorities + * @var array + */ + protected $_priorities = array( + Horde_Log::EMERG => LOG_EMERG, + Horde_Log::ALERT => LOG_ALERT, + Horde_Log::CRIT => LOG_CRIT, + Horde_Log::ERR => LOG_ERR, + Horde_Log::WARN => LOG_WARNING, + Horde_Log::NOTICE => LOG_NOTICE, + Horde_Log::INFO => LOG_INFO, + Horde_Log::DEBUG => LOG_DEBUG, + ); + + + /** + * Write a message to the log. + * + * @param array $event Log event + * @return bool Always True + */ + public function write($event) + { + if (! $this->_opened) { + if (! openlog($this->_options['ident'], $this->_options['openlogOptions'], $this->_options['facility'])) { + throw new Horde_Log_Exception('Unable to open syslog'); + } + } + + $priority = $this->_toSyslog($event['level']); + if (! syslog($priority, $event['message'])) { + throw new Horde_Log_Exception('Unable to log message'); + } + + return true; + } + + /** + * Translate a log level to a syslog LOG_* priority. + * + * @param integer $level + * + * @return integer A LOG_* constant + */ + protected function _toSyslog($level) + { + if (isset($this->_priorities[$level])) { + return $this->_priorities[$level]; + } + return $this->_options['defaultPriority']; + } + +} diff --git a/framework/Log/package.xml b/framework/Log/package.xml index 85e5aa4eb..e502fa22f 100644 --- a/framework/Log/package.xml +++ b/framework/Log/package.xml @@ -54,6 +54,7 @@ http://pear.php.net/dtd/package-2.0.xsd"> + @@ -87,6 +88,7 @@ http://pear.php.net/dtd/package-2.0.xsd"> + -- 2.11.0