]> git.mxchange.org Git - friendica.git/blobdiff - src/Util/Logger/SyslogLogger.php
Remove uneeded variable.
[friendica.git] / src / Util / Logger / SyslogLogger.php
index b1abd5bd5e25577477ac5795454d85cabfb9171c..83c3fc3ce57e8707ebc4891fb7e564fba199eb65 100644 (file)
@@ -66,6 +66,12 @@ class SyslogLogger extends AbstractLogger
         */
        private $logLevel;
 
+       /**
+        * A error message of the current operation
+        * @var string
+        */
+       private $errorMessage;
+
        /**
         * {@inheritdoc}
         * @param string $level       The minimum loglevel at which this logger will be triggered
@@ -141,8 +147,12 @@ class SyslogLogger extends AbstractLogger
         */
        private function write($priority, $message)
        {
-               if (!openlog(self::IDENT, $this->logOpts, $this->logFacility)) {
-                       throw new InternalServerErrorException('Can\'t open syslog for ident "' . $this->channel . '" and facility "' . $this->logFacility . '""');
+               set_error_handler([$this, 'customErrorHandler']);
+               $opened = openlog(self::IDENT, $this->logOpts, $this->logFacility);
+               restore_error_handler();
+
+               if (!$opened) {
+                       throw new \UnexpectedValueException(sprintf('Can\'t open syslog for ident "%s" and facility "%s": ' . $this->errorMessage, $this->channel, $this->logFacility));
                }
 
                $this->syslogWrapper($priority, $message);
@@ -172,6 +182,11 @@ class SyslogLogger extends AbstractLogger
                return $logMessage;
        }
 
+       private function customErrorHandler($code, $msg)
+       {
+               $this->errorMessage = preg_replace('{^(fopen|mkdir)\(.*?\): }', '', $msg);
+       }
+
        /**
         * A syslog wrapper to make syslog functionality testable
         *
@@ -180,6 +195,12 @@ class SyslogLogger extends AbstractLogger
         */
        protected function syslogWrapper($level, $entry)
        {
-               syslog($level, $entry);
+               set_error_handler([$this, 'customErrorHandler']);
+               $written = syslog($level, $entry);
+               restore_error_handler();
+
+               if (!$written) {
+                       throw new \UnexpectedValueException(sprintf('Can\'t write into syslog for ident "%s" and facility "%s": ' . $this->errorMessage, $this->channel, $this->logFacility));
+               }
        }
 }