summaryrefslogtreecommitdiffstats
path: root/lib/SimpleSAML/Logger/SyslogLoggingHandler.php
diff options
context:
space:
mode:
Diffstat (limited to 'lib/SimpleSAML/Logger/SyslogLoggingHandler.php')
-rw-r--r--lib/SimpleSAML/Logger/SyslogLoggingHandler.php75
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);
+ }
+}