From: Michael M Slusarz Date: Fri, 14 Jan 2011 19:16:58 +0000 (-0700) Subject: Bug #9488: Report logger failures X-Git-Url: https://git.internetallee.de/?a=commitdiff_plain;h=f25df9ed011a22d85ca50487d58339ad69faf7ec;p=horde.git Bug #9488: Report logger failures Logger failure will be reported to an admin on login. Alternatively, the bin/check_logger script can be run. --- diff --git a/framework/Core/lib/Horde/Core/Factory/Logger.php b/framework/Core/lib/Horde/Core/Factory/Logger.php index 70f931576..8658b9d23 100644 --- a/framework/Core/lib/Horde/Core/Factory/Logger.php +++ b/framework/Core/lib/Horde/Core/Factory/Logger.php @@ -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()); + } } } diff --git a/framework/Core/lib/Horde/Registry.php b/framework/Core/lib/Horde/Registry.php index b715a0750..19149b973 100644 --- a/framework/Core/lib/Horde/Registry.php +++ b/framework/Core/lib/Horde/Registry.php @@ -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 index 000000000..00e477feb --- /dev/null +++ b/horde/bin/check_logger @@ -0,0 +1,32 @@ +#!/usr/bin/env php + + * @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.'); +}