diff options
Diffstat (limited to 'lib/SimpleSAML/Logger/SyslogLoggingHandler.php')
-rw-r--r-- | lib/SimpleSAML/Logger/SyslogLoggingHandler.php | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/lib/SimpleSAML/Logger/SyslogLoggingHandler.php b/lib/SimpleSAML/Logger/SyslogLoggingHandler.php new file mode 100644 index 0000000..ce27397 --- /dev/null +++ b/lib/SimpleSAML/Logger/SyslogLoggingHandler.php @@ -0,0 +1,75 @@ +<?php + +namespace SimpleSAML\Logger; + +use SimpleSAML\Utils\System; + +/** + * A logger that sends messages to syslog. + * + * @author Lasse Birnbaum Jensen, SDU. + * @author Andreas Åkre Solberg, UNINETT AS. <andreas.solberg@uninett.no> + * @package SimpleSAMLphp + */ +class SyslogLoggingHandler implements LoggingHandlerInterface +{ + private $isWindows = false; + private $format; + + + /** + * Build a new logging handler based on syslog. + */ + public function __construct(\SimpleSAML_Configuration $config) + { + $facility = $config->getInteger('logging.facility', defined('LOG_LOCAL5') ? constant('LOG_LOCAL5') : LOG_USER); + + $processname = $config->getString('logging.processname', 'SimpleSAMLphp'); + + // Setting facility to LOG_USER (only valid in Windows), enable log level rewrite on windows systems + if (System::getOS() === System::WINDOWS) { + $this->isWindows = true; + $facility = LOG_USER; + } + + openlog($processname, LOG_PID, $facility); + } + + + /** + * Set the format desired for the logs. + * + * @param string $format The format used for logs. + */ + public function setLogFormat($format) + { + $this->format = $format; + } + + + /** + * Log a message to syslog. + * + * @param int $level The log level. + * @param string $string The formatted message to log. + */ + public function log($level, $string) + { + // changing log level to supported levels if OS is Windows + if ($this->isWindows) { + if ($level <= 4) { + $level = LOG_ERR; + } else { + $level = LOG_INFO; + } + } + + $formats = array('%process', '%level'); + $replacements = array('', $level); + $string = str_replace($formats, $replacements, $string); + $string = preg_replace('/%\w+(\{[^\}]+\})?/', '', $string); + $string = trim($string); + + syslog($level, $string); + } +} |