Bug #9488: Report logger failures
authorMichael M Slusarz <slusarz@curecanti.org>
Fri, 14 Jan 2011 19:16:58 +0000 (12:16 -0700)
committerMichael M Slusarz <slusarz@curecanti.org>
Fri, 14 Jan 2011 19:17:01 +0000 (12:17 -0700)
Logger failure will be reported to an admin on login.  Alternatively,
the bin/check_logger script can be run.

framework/Core/lib/Horde/Core/Factory/Logger.php
framework/Core/lib/Horde/Registry.php
horde/bin/check_logger [new file with mode: 0755]

index 70f9315..8658b9d 100644 (file)
@@ -5,10 +5,21 @@
  */
 class Horde_Core_Factory_Logger
 {
+    /**
+     * Stores the exception if the logger could not be started.
+     *
+     * @var Horde_Log_Exception
+     */
+    public $error;
+
+    /**
+     */
     public function create(Horde_Injector $injector)
     {
         global $conf;
 
+        $this->error = null;
+
         /* Default handler. */
         if (empty($conf['log']['enabled'])) {
             return new Horde_Core_Log_Logger(new Horde_Log_Handler_Null());
@@ -43,6 +54,7 @@ class Horde_Core_Factory_Logger
             try {
                 $handler = new Horde_Log_Handler_Stream($conf['log']['name'], $append, $formatter);
             } catch (Horde_Log_Exception $e) {
+                $this->error = $e;
                 return new Horde_Core_Log_Logger(new Horde_Log_Handler_Null());
             }
             break;
@@ -57,6 +69,7 @@ class Horde_Core_Factory_Logger
                     $handler->setOption('ident', $conf['log']['ident']);
                 }
             } catch (Horde_Log_Exception $e) {
+                $this->error = $e;
                 return new Horde_Core_Log_Logger(new Horde_Log_Handler_Null());
             }
             break;
@@ -65,7 +78,6 @@ class Horde_Core_Factory_Logger
         default:
             // Use default null handler.
             return new Horde_Core_Log_Logger(new Horde_Log_Handler_Null());
-            break;
         }
 
         if (!defined('Horde_Log::' . $conf['log']['priority'])) {
@@ -73,8 +85,14 @@ class Horde_Core_Factory_Logger
         }
         $handler->addFilter(constant('Horde_Log::' . $conf['log']['priority']));
 
-        /* Horde_Core_Log_Logger contains code to format the log message. */
-        return new Horde_Core_Log_Logger($handler);
+        try {
+            /* Horde_Core_Log_Logger contains code to format the log
+             * message. */
+            return new Horde_Core_Log_Logger($handler);
+        } catch (Horde_Log_Exception $e) {
+            $this->error = $e;
+            return new Horde_Core_Log_Logger(new Horde_Log_Handler_Null());
+        }
     }
 
 }
index b715a07..19149b9 100644 (file)
@@ -2075,7 +2075,7 @@ class Horde_Registry
      */
     public function setAuth($authId, $credentials, array $options = array())
     {
-        global $session;
+        global $browser, $injector, $session;
 
         $app = empty($options['app'])
             ? 'horde'
@@ -2088,7 +2088,7 @@ class Horde_Registry
         }
 
         $session->set('horde', 'auth/authId', $authId);
-        $session->set('horde', 'auth/browser', $GLOBALS['browser']->getAgentString());
+        $session->set('horde', 'auth/browser', $browser->getAgentString());
         if (!empty($options['change'])) {
             $session->set('horde', 'auth/change', 1);
         }
@@ -2103,10 +2103,20 @@ class Horde_Registry
 
         /* Reload preferences for the new user. */
         unset($GLOBALS['prefs']);
-        $GLOBALS['injector']->getInstance('Horde_Core_Factory_Prefs')->clearCache();
+        $injector->getInstance('Horde_Core_Factory_Prefs')->clearCache();
         $this->loadPrefs();
 
         $this->setLanguageEnvironment(isset($options['language']) ? $options['language'] : null, $app);
+
+        /* If an admin, check for logger errors. */
+        if ($this->isAdmin()) {
+            // Do this to ensure Logger object was initialized.
+            $injector->getInstance('Horde_Log_Logger');
+
+            if ($error = $injector->getInstance('Horde_Core_Factory_Logger')->error) {
+                $injector->getInstance('Horde_Notification')->push($error, 'horde.warning');
+            }
+        }
     }
 
     /**
diff --git a/horde/bin/check_logger b/horde/bin/check_logger
new file mode 100755 (executable)
index 0000000..00e477f
--- /dev/null
@@ -0,0 +1,32 @@
+#!/usr/bin/env php
+<?php
+/**
+ * This script verifies that the logger was initialized without errors.
+ *
+ * Copyright 2011 The Horde Project (http://www.horde.org/)
+ *
+ * See the enclosed file COPYING for license information (LGPL). If you
+ * did not receive this file, see http://www.fsf.org/copyleft/lgpl.html.
+ *
+ * @author   Michael Slusarz <slusarz@horde.org>
+ * @category Horde
+ * @license  http://www.fsf.org/copyleft/lgpl.html LGPL
+ * @package  Horde
+ */
+
+require_once dirname(__FILE__) . '/../lib/Application.php';
+Horde_Registry::appInit('horde', array(
+    'authentication' => 'none',
+    'cli' => true
+));
+
+// Ensure Logger object was initialized.
+$injector->getInstance('Horde_Log_Logger');
+
+if ($error = $injector->getInstance('Horde_Core_Factory_Logger')->error) {
+    $cli->fatal($error);
+} else {
+    $cli->message('Logger successfully loaded', 'cli.success');
+    Horde::logMessage('Test log message.');
+    $cli->message('Sent test log message.');
+}